#c #linux #windows #bios
#c #linux #Windows #bios
Вопрос:
Недавно я портировал dmidecode на Windows и просматривал таблицу SMBIOS. Я думал, что это будет простая задача, просто удалите зависящие от Linux материалы из dmidecode, чтобы он компилировался в Windows, и вместо того, чтобы получать SMBIOS из памяти, получите его GetSystemFirmwareTable('RSMB', 0, smBiosData, size1);
и передайте другим функциям.
Но есть проблема, GetSystemFirmwareTable
сообщает не полный SMBIOS, он усекается в начале и не содержит некоторых значений в заголовке, например, количество структур (у меня версия 2.8, другие могут отличаться). остальные SMBIOS одинаковы и могут быть декодированы dmidecode. Может кто-нибудь объяснить, почему это так? Или я ошибаюсь и делаю это неправильно (чтение SMBIOS в Windows)?
Разница:
SMBIOS из Linux (небольшая часть):
5F 53 4D 5F DF 1F 02 08 9A 00 00 00 00 00 00 00 5F 44 4D 49 5F 35 A7 09 20 00 00 00 3B 00 28 00 00 1A 00 00 01 02 00 F0 03 FF 80 98 FB 7F 01 00 00 00 03 0D 05 11 FF FF 20 00 41 6D 65 72 69 63 61 6E 20 4D 65 67 61 74 72 65 6E 64 73 20 49 6E 74 65 72 6E 61 74 69 6F 6E 61 6C 2C 20 4C 4C 43 2E 00 31 2E 44 36 00 30 31 2F 31 32 2F 32 30 32 31 00 00 01 1B 01 00 01 02 03 04 57 87 C5 95 08 81 18 D9 A7 58 00 D8 61 A1 F2 74 06 05 06 4D 69 63 72 6F 2D 53 74 61 72 20 49 6E 74 65 72 6E 61 74 69 6F 6E 61 6C 20 43 6F 2E 2C 20 4C 74 64 2E
SMBIOS из Windows (небольшая часть):
00 02 08 00 A7 09 00 00 00 1A 00 00 01 02 00 F0 03 FF 80 98 FB 7F 01 00 00 00 03 0D 05 11 FF FF 20 00 41 6D 65 72 69 63 61 6E 20 4D 65 67 61 74 72 65 6E 64 73 20 49 6E 74 65 72 6E 61 74 69 6F 6E 61 6C 2C 20 4C 4C 43 2E 00 31 2E 44 36 00 30 31 2F 31 32 2F 32 30 32 31 00 00 01 1B 01 00 01 02 03 04 57 87 C5 95 08 81 18 D9 A7 58 00 D8 61 A1 F2 74 06 05 06 4D 69 63 72 6F 2D 53 74 61 72 20 49 6E 74 65 72 6E 61 74 69 6F 6E 61 6C 20 43 6F 2E 2C 20 4C 74 64 2E