Информация о биосе в C++
Я просто хочу знать, как получить информацию о BIO в C++. Я попробовал следующий вариант, но у каждого есть свой недостаток.
- Из реестра: Но я нашел какую-то систему, в которой отсутствует HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS, возможно, это виртуальная машина.
- Использование 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 и есть несколько ссылок для дальнейшего чтения.