Как получить производителя и модель BIOS на C++ без использования WMI?

Мы используем пакет обновления 3 для Windows XP Pro как 32-разрядный, так и 64-разрядный. Мы используем WMI для получения производителя и модели BIOS, но мы действительно предпочли бы подход, который использовал либо Win32 API, либо язык ассемблера, либо что-то кроме WMI или COM. Примеры кода приветствуются.


person jjxtra    schedule 12.06.2009    source источник


Ответы (4)


Он находится в реестре по адресу HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System.

У вас есть SystemBiosVersion, SystemBiosDate и т. д.

Кроме того, есть подключ под названием BIOS, который содержит еще больше информации, такой как BIOSVendor и BIOSVersion.

В зависимости от того, кто построил систему, вы также сможете получить BaseBoardManufacturer и другую интересную информацию.

ОБНОВЛЕНИЕ

Вы можете проверить эту ссылку. Это код VB. Они пытаются прочитать его из реестра, но в противном случае возвращаются к извлечению строковых данных из адреса памяти. В данном случае это &HFE061 для версии и &HFFFF5 для даты.

person NotMe    schedule 12.06.2009
comment
На моей 32-битной машине Vista это прекрасно работает, однако мы запускаем некоторые 32-битные приложения в Windows XP Professional x64, и эти ключи не содержат никакой информации. - person jjxtra; 12.06.2009
comment
Согласно этой статье от 2002 года, он должен быть там. pctools.com/guides/registry/detail/830 - person NotMe; 13.06.2009
comment
Странный. У нас также есть несколько стандартных ящиков сервера 2003, и в них тоже нет ключей... - person jjxtra; 13.06.2009
comment
Интересный. Вы уверены, что ищете правильный ключ? Другая мысль заключается в том, что это проблема с разрешениями или что-то в этом роде. Я только что проверил 3 наших сервера. У всех были SystemBiosDate и SystemBiosVersion. под ключом hardware/description/system. - person NotMe; 15.06.2009
comment
У вас серверы xp или win 2003? - person jjxtra; 16.06.2009
comment
Похоже, что из-за изображения машины эти настройки недоступны. Однако это кажется самым простым решением, поэтому я принимаю ваш ответ. - person jjxtra; 17.06.2009
comment
Работает на Windows 7 в Parallels, есть ключ BIOS, но он пустой. Нет SystemBiosVersion, SystemBiosDate или чего-то еще. - person Vern Jensen; 11.04.2014
comment
Имейте в виду, что рассчитывать на достоверный ответ не стоит, так как реестр можно легко изменить, это, конечно, зависит от вашей необходимости. - person Steinfeld; 10.07.2014

Вы можете сопоставить память SMBIOS и проанализировать ее. Большая часть информации, которую вы хотите, находится там. Это можно сделать из любого языка, имеющего доступ к примитивам отображения системной памяти.

Кроме того, этот документ содержит информацию о функциях Win32, которые могут использоваться для запроса SMBIOS.

person Christopher    schedule 12.06.2009
comment
Спасибо за ссылки на SMBIOS. Однако вызовы Win32 в документе недоступны для 32-разрядной версии XP Pro, судя по тому, что я вижу в документации MSDN. - person jjxtra; 13.06.2009

DmiDecode для Windows может это сделать.

person Josh Kelley    schedule 12.06.2009
comment
Есть ли для этого проект Visual Studio C++? Я ничего не мог найти. - person jjxtra; 13.06.2009
comment
Это порт инструмента для Linux, так что, вероятно, нет. - person Josh Kelley; 13.06.2009

В codeproject есть статья с исходным кодом, который использует вызов API GetSystemFirmwareTable для получения информации SMIBIOS. ссылка: http://www.codeproject.com/KB/system/SMBIOS_Peek.aspx

person Atempcode    schedule 07.12.2011