web-dev-qa-db-ja.com

ROMサイズの見方は?

Windowsで、UEFI/BIOSを保存するためにコンピューターにインストールされているROMチップの容量を確認するにはどうすればよいですか?他のアプリケーションをインストールせずにWindowsツールまたはコマンドを使用する方法をお勧めします。

2
TheLinuxGK

SMBIOS情報の読み取り

ウィキペディアから:

コンピューティング では、システム管理BIOS[〜# 〜] smbios [〜#〜])仕様は、 データ構造 (およびアクセスメソッド)を定義します。これを使用して、 [〜#〜] bios [〜#〜] of a computer 。 1999年頃、それは Distributed Management Task Force (DMTF)のドメインの一部になりました。 [...]ほぼ同時に Microsoft は、 OEM とBIOSベンダーがインターフェイス/データセットをサポートすることを要求し始めましたMicrosoft 認定 を取得するため。

出典: システム管理BIOS

SMBIOS情報はさまざまなデータテーブルに保存されます。最初のもの(タイプ0)には、ベンダー、バージョン、リリース日などの基本的な詳細が含まれています。 BIOSを含む物理デバイスのサイズは、上記のテーブルの offest _0x9_にある1バイトに対応します。

実際のサイズは次のように計算できます。

_64K * (value + 1)
_

_0_の値は、サイズが64 KiB であることを意味し、_1_は128KiBを意味します。

私の知る限り、Windowsには、ROMサイズなどの特定の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
_

パワーシェル

_$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情報を読み取るための推奨される方法です。

ソース: Device\PhysicalMemory Object

[SMBIOS]ドライバーは、この情報を_HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data_のレジストリにも保存します。 SMBIOS情報はこの場所のレジストリに保存されますが、コンシューマーは引き続きWMIまたはGetSystemFirmwareTable()APIを使用してSMBIOSデータを取得する必要があります。今後のWindowsのリリースごとに、この情報がこのレジストリサブキーに保存される保証はありません。

出典: WindowsでのSMBIOSサポート

参考文献

4
and31415

私はあなたができるとは思いません、少なくとも一般的な方法ではありません。

基本的に、これはBIOSコードのサイズがユーザーであるあなたに有用な情報を提供しないためです。 IBM PC互換コンピュータのBIOS いくつかの主な責任があり、そのほとんどは他のプラットフォームにも適用されますが、実装が異なる場合があります。

  • パワーオンセルフテスト(POST)を実行します
  • 基本的なハードウェアの検出と初期化を行います
  • 基本的な実行環境をセットアップします。その詳細は1981年から 元のIBM 5150 PC に戻ります(CPUは リアルモード であり、いくつかのCPUレジスタは次のように初期化されます。既知の値、およびいくつかのCPUフラグが既知の値に設定されている)
  • これは、オペレーティングシステムに(非常に原始的な)ハードウェアアクセスおよび検出機能を提供します。これらは、CPUの技術的な制限(たとえば、 ロングモード から切り替える簡単な方法がない)またはパフォーマンスの制約(実際に切り替える)のために、最新のオペレーティングシステムでは使用されていません。または V86モード 16ビットBIOSコードの実行には時間がかかるため、保護モードまたはロングモードのままにして、代わりにOSで自分で実行する方が高速です)
  • オペレーティングシステムの第1ステージのブートローダーをRAM内の既知の固定された場所にロードし、実行を転送します
  • 基本的なシステム設定をセットアップするためのユーザーインターフェイスを提供します。厳密に言えば、これはオプションであり、 1980年代のBIOSはしばしば提供しませんでした 代わりに ソフトウェアは別売り またはハードウェア DIPスイッチ に依存します=グラフィックカードのタイプやインストールされているRAM)の量などの基本的なシステム設定も構成するため

これらのタスクを実装するために使用されるコードの量を知ることは、ユーザーにとって何のメリットもありません。初期の頃(ここではWindows 3.0から3.1の前にDOSについて話しているので、1980年代初頭から1990年代初頭)、BIOSは基本的な機能を実行するためにしばしば依存されていたため、BIOSコードサイズは潜在的に =少なくとも部分的にはパフォーマンスに対応しますが、最近のコンピューターでは、BIOSは基本的にオペレーティングシステムの役割に任せられています ブートストラップ および低レベルのハードウェア構成インターフェイス。また、その時代のコンピューターでは、BIOSコードがまったく交換可能であった場合、それは物理的にROMマザーボード上のチップ; フラッシュアップグレード可能なBIOS ずっと後の発明です。

これを、ストレージデバイスまたはRAMのサイズを見つけることと比較します。違いは、それらのサイズを実際に知ることができるということは、ユーザーに知っておく価値のあることを教えてくれるということです:利用可能なストレージスペースの量デバイスごとまたは全体として、コンピューターに保存できるデータ量の決定要因であり、RAMのサイズは、量の決定要因の1つです。同時に操作できるデータと、そのデータの操作速度。

あなたcan、原則として、特定のマザーボードメーカーのWebサイトにアクセスし、ダウンロード可能なBIOSアップデートイメージを探します。これらのイメージファイルのサイズは、非常に高い確実性で、フラッシュのサイズに対応しますROM BIOSコードを保持するチップその特定のマザーボード上。今日の一般的なサイズは数メガバイトのオーダーだと思います; 元のIBM 5150 PCBIOSは8KBでした そしてXT(IBM 5160)this IBMでは32KBに引き上げられました。初期のクリーンルームIBMPC BIOSクローンは、かなり少ないコードでそれを実行できたので、何かが足りないのではないかと関係者が少なくとも一度は疑問に思っていたという逸話をどこかで読みました。

そしてもちろん、それはPC BIOS以外のシステムに他のファームウェアがある可能性を完全に無視します。グラフィックカード、ネットワークカード、ディスクコントローラカード、およびその他のあらゆる種類の周辺機器 独自のBIOSを提供 実装の観点からは、Webブラウザのようにマザーボード上のPCBIOSから完全に分離されています。オペレーティングシステムから完全に分離されている(または分離されている必要があります)。

2
a CVn