Почему SMBIOS той же машины, о которой сообщает Linux, отличается от Windows?

#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