Информация о биосе в переполнении стека

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

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

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

2

Решение

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

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

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

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

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

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

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

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

1

Другие решения

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

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

1