读取 SMBIOS 信息

读取 SMBIOS 信息

在 Windows 中,如何查看计算机上安装的 ROM 芯片存储 UEFI/BIOS 的容量?我更喜欢使用 Windows 工具或命令而不安装任何其他应用程序。

答案1

读取 SMBIOS 信息

来自维基百科:

计算, 这系统管理 BIOS系统管理基本输入输出系统) 规范定义数据结构(和访问方法)可用于读取存储在BIOS电脑大约在 1999 年,它成为分布式管理任务组(DMTF)。[...] 大约在同一时间微软开始要求原始设备制造商和 BIOS 供应商支持接口/数据集,以便 Microsoft认证

来源:系统管理 BIOS

SMBIOS 信息存储在不同的数据表中;第一个数据表(类型 0)包含供应商、版本和发布日期等基本详细信息。包含 BIOS 的物理设备的大小对应于位于偏移 0x9该表。

实际尺寸可以通过以下方式计算:

64K * (value + 1)

0表示大小为 64基布1表示 128 KiB,依此类推。

据我所知,Windows 没有提供可以检索特定 SMBIOS 数据(例如 ROM 大小)的内置实用程序。不过,您仍然可以自己编写脚本;请参阅下面的一些工作示例。作为替代方案,您可以使用第三方程序,例如dmidecodeWindows 端口


批处理脚本

@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

VB脚本

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

电源外壳

$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) 是读取 Windows 中的 SMBIOS 信息的首选方法。

来源:设备\物理内存对象

[SMBIOS] 驱动程序还将此信息存储在注册表中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data。尽管 SMBIOS 信息存储在注册表中的此位置,但消费者应继续使用 WMI 或GetSystemFirmwareTable()API 来检索 SMBIOS 数据。不能保证此信息将在每个后续版本的 Windows 中存储在此注册表子项中。

来源:Windows 中的 SMBIOS 支持

进一步阅读

答案2

我不认为你能,至少不是以任何普遍的方式。

基本上,这是因为BIOS 代码的大小没有提供任何有用的信息对于您,用户来说。IBM PC 兼容计算机中的 BIOS有几个主要职责,其中大部分也适用于其他平台,但可能以不同的方式实现:

  • 它执行开机自检 (POST)
  • 它进行基本的硬件检测和初始化
  • 它设置了基本的执行环境,具体细节可以追溯到原装 IBM 5150 电脑从 1981 年开始(CPU 处于实模式,几个 CPU 寄存器被初始化为已知值,并且几个 CPU 标志被设置为已知值)
  • 它为操作系统提供了(非常原始的)硬件访问和检测功能;这些功能没有被现代操作系统使用,要么是因为 CPU 的技术限制(没有简单的方法切换出长模式,例如)或由于性能限制(在真实或V86 模式执行 16 位 BIOS 代码需要很长时间,因此保持受保护或长模式并在操作系统中自行执行会更快)
  • 它将操作系统的第一阶段引导加载程序加载到 RAM 中已知的固定位置,并将执行转移到该位置
  • 它提供了一个用于设置基本系统设置的用户界面;严格来说,这是可选的,并且20 世纪 80 年代的 BIOS 通常没有提供这样的接口,而不是依赖软件单独发货或者在硬件上DIP 开关用于配置基本系统设置,例如显卡类型和安装的 RAM 数量

了解这些任务需要多少代码对用户没有任何好处。在早期(我们这里说的是 Windows 3.0 到 3.1 之前的 DOS,也就是 20 世纪 80 年代初到 90 年代初),BIOS 经常被用来执行基本功能,因此 BIOS 代码大小可能潜在至少部分对应于性能,但在现代计算机中,BIOS 已基本被降级为操作系统的角色引导程序和低级硬件配置接口。此外,在那个时代的计算机中,如果 BIOS 代码是可替换的,那就是通过物理移除并重新安装主板上的 ROM 芯片;闪存可升级 BIOS是后来才发明的。

你可以将其与查找存储设备或 RAM 的大小进行比较。区别在于能够分辨出它们的大小实际上可以告诉您(用户)一些值得了解的事情:可用的存储空间量(按每个设备或总体计算)是决定您可以在计算机上存储多少数据的决定性因素,而 RAM 的大小是决定您可以同时处理多少数据以及处理这些数据的速度的决定性因素之一。

能,原则上,访问特定主板制造商的网站并查找可下载的 BIOS 更新映像。这些映像文件的大小将非常肯定地与保存 BIOS 代码的闪存 ROM 芯片的大小相对应在那个特定的主板上。我认为如今的常见大小是几兆字节的数量级;最初的 IBM 5150 PC BIOS 为 8 KB从 XT(IBM 5160)开始,IBM 的这个数字上升到了 32 KB。我读到过一则轶事,早期的 IBM PC BIOS 克隆至少有一次让参与其中的人怀疑他们是否遗漏了什么,因为他们能够用少得多的代码来完成这件事。

当然,这完全忽略了系统中存在其他固件除了 PC BIOS 之外。显卡、网卡、磁盘控制器卡以及各种其他外围设备提供自己的 BIOS从实现的角度来看,它们与主板上的 PC BIOS 完全分离,就像 Web 浏览器与操作系统完全分离(或应该完全分离)一样。

答案3

在 Linux 中,您可以通过多种方式找到闪存 ROM 的容量。dmidecode 命令提供了有关 BIOS 的大量有用信息,包括其芯片容量。我最终发现它是 1 MB。我建议大家要么看看他们的主板,要么尝试使用 Linux 的 Live CD。

相关内容