讀取SMBIOS訊息

讀取SMBIOS訊息

在 Windows 中,如何查看電腦上安裝的 ROM 晶片用於儲存 UEFI/BIOS 的容量?我更喜歡使用 Windows 工具或命令而不安裝任何其他應用程式的方法。

答案1

讀取SMBIOS訊息

來自維基百科:

計算, 這系統管理BIOSSMBIOS) 規範定義資料結構(和存取方法)可用於讀取儲存在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 Management Instrumentation (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 通常沒有提供這樣的接口,而不是依賴軟體單獨出貨或在硬體上撥碼開關用於配置基本系統設置,例如顯示卡類型和安裝的 RAM 數量

對於使用者來說,了解使用了多少程式碼來實現這些任務沒有任何好處。早在早期(我們在這裡討論的是 Windows 3.0 到 3.1 之前的 DOS,即 1980 年代初到 1990 年代初),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 完全分離,就像網頁瀏覽器完全(或應該)與作業系統完全分離一樣。

答案3

在Linux中,您可以透過多種方式找到Flash ROM的容量。 dmidecode 命令提供了許多有關 BIOS 的有用信息,包括其晶片容量。最後發現是1MB。我建議大家要嘛看看他們的主機板,要嘛嘗試使用 Linux 的 Live CD。

相關內容