Информация о биосе в C++

Я просто хочу знать, как получить информацию о BIO в C++. Я попробовал следующий вариант, но у каждого есть свой недостаток.

  1. Из реестра: Но я нашел какую-то систему, в которой отсутствует HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS, возможно, это виртуальная машина.
  2. Использование WMI: Но не обязательно, чтобы WMI работал на всех системах, потому что в некоторых случаях либо служба отключена, либо объект WMI отсутствует!!

Мне нужно одно постоянное решение, которое дает мне БИО информацию на С ++.

2 ответа

Решение

Попытка определить, находитесь ли вы в виртуальной ОС, выполняется различными способами и зависит от используемого программного обеспечения для виртуализации.

Есть много разных вопросов по этому поводу уже в stackru.

В определенном порядке, вот несколько статей, они охватывают различные используемые части виртуализации:

Обнаружить виртуальную ОС из приложения?

определить, работает ли приложение на виртуальной коробке

64-битное обнаружение Windows VMware

Как определить, что вы работаете под виртуальной машиной?

http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual

Пока Salgar побеждает меня, один из более "безопасных" методов - использовать инструкцию CPUID, которая обычно работает на современных виртуальных машинах. Я знаю, что KVM, Microsoft и Xen используют лист CPUID около 0x40000000, который возвращает "Вы находитесь на виртуальной машине". Не уверен на 100%, если VMWare также поддерживает тот же - на "реальной" машине они зарезервированы и не используются.

Вот страница, на которой обсуждаются несколько опций помимо CPUID: http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/detecting-x86-virtual-machines.html и есть несколько ссылок для дальнейшего чтения.

Другие вопросы по тегам