Я пытаюсь получить серийный номер BIOS для 32-разрядной системы WinXP Embedded из приложения режима пользователя Win32 (MFC, если это делает какой-либо diff).Получение серийного номера BIOS без WMI
Я пытаюсь получить тот же серийный номер, который вы можете получить через WMI из класса Win32_BIOS из члена «SerialNumber». Проблема в том, что я не могу использовать WMI, так как это нужно будет запускать в старых системах, у которых не установлен WMI.
В основном у нас есть серия машин с данными, закодированными в этом поле BIOS, поэтому они не могут быть изменены пользователями, и нам иногда требуется, чтобы эта информация выводилась в файл и отправлялась нам.
Я нашел «GetSystemFirmwareTable», но минимальная версия Win - 64-бит WinXP. WMI не может быть и речи, и у нас уже есть код для чтения из непосредственно сопоставленного физического адреса, но проблема в том, что используемое нами программное обеспечение, которое позволяет нам сопоставлять эти физические адреса, привязано к нашему программному обеспечению, и наше программное обеспечение не может работать на данном этапе в этом конкретном случае использования (лицензирование).
Насколько я знаю, единственный способ сопоставить физический аппаратный адрес из приложения пользовательского режима - это вникать в территорию драйвера и интегрировать в приложение некоторые библиотеки драйверов, чтобы он мог сопоставлять физические адреса.
Есть ли какая-то теневая копия, которую ОС делает доступной без огромного количества настроек?
Я не совсем уверен, что понимаю. Следуя спецификации, я все равно должен получить доступ к аппаратным адресам 0x000f0000, а это значит, что мое приложение режима пользователя должно иметь возможность сопоставить его с виртуальным адресом, который я не могу сделать в данный момент (насколько мне известно) из-за того, что я сказал выше. Не является ли ntvdm процессом, который запускает 16-разрядные приложения DOS в текущих версиях Windows? Вы предлагаете мне написать 16-разрядное приложение DOS, чтобы я мог прочитать его копию данных SMBIOS? – NaimK
Да, это то, о чем я думал. Удалите COM-файл MS-DOS и запустите его из своего приложения Windows и напишите данные SMBIOS в файл с помощью INT 0x21, который затем вы можете получить из своего пользовательского режима. –
Хм, хорошая идея, но я действительно нашел пример кода для приложения sysinternals.com для отображения физической памяти: http://nah6.com/~itsme/cvs-xdadevtools/itsutils/src/sysint-physmem. cpp Я смог адаптировать это, чтобы сделать то, что хотел, довольно легко. Но он работает только на XP, для меня это хорошо, это все, в чем я нуждаюсь, потому что на чем-то более высоком мы, вероятно, закончим использование WMI, потому что это просто проще и поставляется с ОС. – NaimK