MSDN.WhiteKnight - Stack Overflow answers
Ответ на "C# Как достать информацию об устройствах компьютера не используя WMI"
Answer 780170
На самом деле, некоторую информацию можно получить без всякого P/Invoke.
Класс Environment:
Console.WriteLine("OS version: " + Environment.OSVersion.ToString()); Console.WriteLine("Processor count: " + Environment.ProcessorCount.ToString());
Ветка реестра HKLM\Hardware:
using Microsoft.Win32; //... object result = Registry.GetValue( "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", "ProcessorNameString", ""); if (result != null) Console.WriteLine("Processor name: " + (result).ToString()); result = Registry.GetValue( "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", "~MHz", 0); if (result != null) { Console.WriteLine("Processor frequency: " + ((int)result).ToString()+" MHz"); } result = Registry.GetValue( "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS" , "BaseBoardManufacturer", ""); if (result != null) Console.WriteLine("Motherboard vendor: " + (result).ToString()); result = Registry.GetValue( "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS" , "BaseBoardProduct", 0); if (result != null) Console.WriteLine("Motherboard name: " + (result).ToString());
Но основная часть информации об устройствах находится в таблице SMBIOS, которую можно получить функцией GetSystemFirmwareTable (действительно, из kernel32.dll):
[DllImport("kernel32.dll")] public static extern uint GetSystemFirmwareTable( uint FirmwareTableProviderSignature, uint FirmwareTableID, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pFirmwareTableBuffer, uint BufferSize); // ... byte[] arr = new byte[5000]; uint sig = 0x52534D42;//RSMB uint res = GetSystemFirmwareTable(sig, 0, arr, 5000); if (res == 0 || res > 5000) { throw new ApplicationException("GetSystemFirmwareTable failed"); }
Структура таблицы SMBIOS описана в спецификации: https://www.dmtf.org/standards/smbios
Пример извлечения сведений об оборудовании на языке C можно найти здесь. Также, здесь есть код парсера SMBIOS на C#, под лицензией MPL.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.