Чтение информации SMBIOS

Чтение информации SMBIOS

В Windows, как я могу узнать емкость микросхемы ПЗУ, установленной на моем компьютере для хранения UEFI/BIOS? Я бы предпочел способ с использованием инструмента или команды Windows без установки какого-либо другого приложения.

решение1

Чтение информации SMBIOS

Из Википедии:

Ввычисление,BIOS управления системой(SMBIOS) спецификация определяетструктуры данных(и методы доступа), которые можно использовать для чтения информации, хранящейся вБИОСизкомпьютер. Около 1999 года он стал частью доменаЦелевая группа по распределенному управлению(DMTF). [...] Примерно в то же времяМайкрософтначали требовать, чтобыOEM-производителии поставщики BIOS поддерживают интерфейс/набор данных, чтобы иметь возможность использовать Microsoftсертификация.

Источник:BIOS управления системой

Информация SMBIOS хранится в разных таблицах данных; первая из них (тип 0) содержит основные данные, такие как поставщик, версия и дата выпуска. Размер физического устройства, содержащего BIOS, соответствует одному байту, который находится воффест 0x9указанной таблицы.

Фактический размер можно рассчитать следующим образом:

64K * (value + 1)

Значение 0означает, что размер равен 64.КиБ, 1означает 128 КиБ и т. д.

Насколько мне известно, Windows не предоставляет встроенной утилиты, которая может извлекать определенные данные SMBIOS, такие как размер ПЗУ. Вы все равно можете написать скрипт самостоятельно; ниже приведены некоторые рабочие примеры. В качестве альтернативы вы можете использовать стороннюю программу, напримерdmidecodeпорт Windows.


Пакетный скрипт

@echo off
setlocal enabledelayedexpansion

set key=HKLM\SYSTEM\CurrentControlSet\services\mssmbios\Data

for /f "tokens=3" %%G in (
'reg query "%key%" /v "SMBiosData" ^| findstr /i /c:"REG_"'
) do (
set "size=%%~G"
set /a size=64 * 0x!size:~34,2! + 64
)

echo ROM Size: %size% KiB
PAUSE
exit /b

VBScript

Set tables = GetObject("winmgmts:\\.\root\wmi").ExecQuery _
    ("SELECT * FROM MSSmBios_RawSMBiosTables")

For Each obj In tables
    WScript.Echo "ROM Size: " & (64 * obj.SMBiosData(9) + 64) & " KiB"
Next

PowerShell

$tables = Get-WmiObject -ComputerName . -Namespace root\wmi -Query "
    SELECT * FROM MSSmBios_RawSMBiosTables"

foreach ($obj in $tables)
{
    echo $("ROM Size: " + (64 * $obj.SMBiosData[9] + 64) + " KiB")
}

Замечания

Инструментарий управления Windows (WMI) является предпочтительным методом чтения информации SMBIOS в Windows.

Источник:Устройство\Объект Физической Памяти

Драйвер [SMBIOS] также сохраняет эту информацию в реестре в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data. Хотя информация SMBIOS хранится в реестре в этом месте, потребители должны продолжать использовать WMI или GetSystemFirmwareTable()API для извлечения данных SMBIOS. Нет никакой гарантии, что эта информация будет храниться в этом подразделе реестра для каждого последующего выпуска Windows.

Источник:Поддержка SMBIOS в Windows

дальнейшее чтение

решение2

Я не думаю, что ты сможешь,по крайней мере, не в какой-либо общей форме.

В основном, это потому, чторазмер кода BIOS не несет никакой полезной информацииВам, пользователю.BIOS в IBM PC-совместимом компьютереимеет несколько основных обязанностей, большинство из которых применимы и к другим платформам, но могут быть реализованы по-разному:

  • Выполняет самотестирование при включении питания (POST)
  • Он выполняет базовое обнаружение и инициализацию оборудования.
  • Он устанавливает базовую среду выполнения, специфика которой восходит коригинальный IBM 5150 ПКс 1981 года (процессор находится вреальный режим, несколько регистров ЦП инициализируются известными значениями, а несколько флагов ЦП устанавливаются известными значениями)
  • Он предоставляет операционной системе (очень примитивные) средства доступа к оборудованию и обнаружения; они не используются современными операционными системами либо из-за технических ограничений ЦП (нет простого способа отключениядлинный режим, например) или из-за ограничений производительности (переключение туда и обратно на реальный илиРежим V86выполнение 16-битного кода BIOS занимает много времени, поэтому быстрее оставаться в защищенном или долгом режиме и просто сделать это самостоятельно в ОС)
  • Он загружает загрузчик первой стадии операционной системы в известное фиксированное место в оперативной памяти и передает ему выполнение.
  • Он предоставляет пользовательский интерфейс для настройки основных параметров системы; строго говоря, это необязательно, иBIOS 1980-х годов часто не имелипредоставить такой интерфейс, вместо этого полагаясь напрограммное обеспечение поставляется отдельноили на оборудованииDIP-переключателидля настройки даже таких базовых параметров системы, как тип видеокарты и объем установленной оперативной памяти

Ни в одном из этих случаев нет никакой выгоды для пользователя в том, чтобы знать, сколько кода используется для реализации этих задач. В ранние дни (мы говорим о DOS до Windows 3.0 до 3.1, то есть с начала 1980-х до начала 1990-х годов) BIOS часто использовался для выполнения базовых функций, и поэтому размер кода BIOS могпотенциальнохотя бы отчасти соответствуют производительности, но в современных компьютерах BIOS в основном низведен до роли операционной системыбутстраппери интерфейс конфигурации оборудования низкого уровня. Кроме того, в компьютерах той эпохи, если код BIOS вообще можно было заменить, это можно было сделать, физически удалив и переустановив микросхемы ПЗУ на материнской плате;флэш-обновляемые BIOSявляются гораздо более поздним изобретением.

Вы сравните это с поиском размера запоминающих устройств или оперативной памяти. Разница в том, чтоВозможность определить их размер на самом деле говорит вам, пользователю, кое-что важное:Объем доступного дискового пространства (на каждое устройство или в совокупности) является определяющим фактором того, сколько данных вы сможете хранить на компьютере, а размер оперативной памяти является одним из определяющих факторов того, с каким объемом данных вы сможете работать одновременно и насколько быстро будет осуществляться работа с этими данными.

Тыможет,в принципе, зайдите на сайт производителя конкретной материнской платы и поищите там загружаемые образы обновления BIOS. Размер этих файлов образов с большой долей вероятности будет соответствовать размеру чипа флэш-ПЗУ, содержащего код BIOSна этой конкретной материнской плате.Я думаю, что сегодня обычный размер составляет порядка нескольких мегабайт;оригинальный BIOS для ПК IBM 5150 имел размер 8 КБи начиная с XT (IBM 5160) в IBM это было увеличено до 32 КБ. Я где-то читал анекдот о том, что ранние клоны BIOS для IBM PC в чистых комнатах по крайней мере однажды заставили людей задуматься, не упускают ли они чего-то, поскольку они могли сделать это с помощью значительно меньшего количества кода.

И, конечно, это полностью игнорирует возможностьв системе есть другие прошивкипомимо BIOS ПК. Видеокарты, сетевые карты, карты контроллеров дисков и всякие другие периферийные устройствапредоставляют свои собственные BIOSкоторые с точки зрения реализации полностью отделены от BIOS ПК на материнской плате, точно так же, как веб-браузер полностью отделен (или должен быть отделен) от операционной системы.

решение3

В Linux можно узнать емкость flash rom множеством способов. Команда dmidecode предоставляет много полезной информации о BIOS, включая емкость его чипа. В конце концов я обнаружил, что она составляет 1 МБ. Я предлагаю всем либо взглянуть на свою материнскую плату, либо попробовать live CD с Linux.

Связанный контент