Lesen von SMBIOS-Informationen

Lesen von SMBIOS-Informationen

Wie kann ich unter Windows die Kapazität des auf meinem Computer installierten ROM-Chips zum Speichern von UEFI/BIOS anzeigen? Ich bevorzuge eine Methode mit einem Windows-Tool oder -Befehl, ohne dass eine andere Anwendung installiert werden muss.

Antwort1

Lesen von SMBIOS-Informationen

Aus Wikipedia:

InInformatik, DieSystemverwaltungs-BIOS(SMBIOS) Spezifikation definiertDatenstrukturen(und Zugriffsmethoden), die zum Lesen von Informationen verwendet werden können, die imBIOSeinesComputer. Etwa 1999 wurde es Teil der Domäne derVerteilte Management-Task Force(DMTF). [...] Etwa zur gleichen ZeitMicrosoftbegann zu verlangen, dassOEM-Herstellerund BIOS-Anbieter unterstützen die Schnittstelle/Datensatz, um MicrosoftZertifizierung.

Quelle:Systemverwaltungs-BIOS

Die SMBIOS-Informationen werden in verschiedenen Datentabellen gespeichert; die erste (Typ 0) enthält grundlegende Details wie Hersteller, Version und Veröffentlichungsdatum. Die Größe des physischen Geräts, das das BIOS enthält, entspricht einem einzelnen Byte, das sich an folgender Stelle befindet:ausgleichen 0x9der besagten Tabelle.

Die tatsächliche Größe kann folgendermaßen berechnet werden:

64K * (value + 1)

Ein Wert von 0bedeutet, dass die Größe 64 istKiB, 1bedeutet 128 KiB und so weiter.

Soweit ich weiß, bietet Windows kein integriertes Dienstprogramm, mit dem bestimmte SMBIOS-Daten wie die ROM-Größe abgerufen werden können. Sie können jedoch trotzdem selbst ein Skript schreiben; einige funktionierende Beispiele finden Sie weiter unten. Alternativ können Sie ein Drittanbieterprogramm verwenden, z. B.dmidecodeWindows-Port.


Batch-Skript

@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

Power Shell

$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")
}

Bemerkungen

Windows Management Instrumentation (WMI) ist die bevorzugte Methode zum Lesen von SMBIOS-Informationen in Windows.

Quelle:Device\PhysicalMemory-Objekt

Der [SMBIOS]-Treiber speichert diese Informationen auch in der Registrierung unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data. Obwohl SMBIOS-Informationen in der Registrierung an diesem Speicherort gespeichert sind, sollten Benutzer weiterhin WMI oder die GetSystemFirmwareTable()API verwenden, um SMBIOS-Daten abzurufen. Es gibt keine Garantie, dass diese Informationen für jede nachfolgende Version von Windows in diesem Registrierungsunterschlüssel gespeichert werden.

Quelle:SMBIOS-Unterstützung in Windows

Weiterführende Literatur

Antwort2

Ich glaube nicht, dass du das kannst.zumindest nicht in allgemeiner Form.

Im Grunde liegt das daran, dassDie Größe des BIOS-Codes liefert keine nützlichen Informationenan Sie, den Benutzer.Das BIOS in einem IBM PC-kompatiblen Computerhat einige Hauptaufgaben, von denen die meisten auch für andere Plattformen gelten, aber anders implementiert werden können:

  • Es führt den Power-On Self Test (POST) durch
  • Es führt eine grundlegende Hardwareerkennung und Initialisierung durch
  • Es richtet die grundlegende Ausführungsumgebung ein, deren Einzelheiten auf dieOriginal IBM 5150 PCvon 1981 (die CPU ist inRealmodus, mehrere CPU-Register werden auf bekannte Werte initialisiert und mehrere CPU-Flags werden auf bekannte Werte gesetzt)
  • Es bietet ein Betriebssystem mit (sehr primitiven) Hardware-Zugriffs- und Erkennungsfunktionen; diese werden von modernen Betriebssystemen nicht verwendet, entweder aufgrund technischer Einschränkungen der CPU (keine einfache Möglichkeit, auszuschaltenLangmodus) oder aufgrund von Leistungseinschränkungen (Umschalten zwischen realen undV86-Modusdie Ausführung des 16-Bit-BIOS-Codes dauert lange, daher ist es schneller, im geschützten oder langen Modus zu bleiben und die Ausführung stattdessen einfach selbst im Betriebssystem durchzuführen)
  • Es lädt den Bootloader der ersten Stufe des Betriebssystems an einen bekannten, festen Speicherort im RAM und überträgt die Ausführung dorthin.
  • Es bietet eine Benutzeroberfläche zum Einrichten grundlegender Systemeinstellungen. Dies ist streng genommen optional undBIOSe der 1980er Jahre haben oft nichtbieten eine solche Schnittstelle, anstatt sich aufSoftware wird separat geliefertoder auf HardwareDip-Schalterzur Konfiguration grundlegender Systemeinstellungen wie Grafikkartentyp und installierter RAM-Größe

Nichts davon bringt dem Benutzer einen Vorteil, wenn er weiß, wie viel Code zur Implementierung dieser Aufgaben verwendet wird. Früher (wir sprechen hier von DOS vor Windows 3.0 bis 3.1, also Anfang der 1980er bis Anfang der 1990er Jahre) wurde das BIOS oft für die Ausführung grundlegender Funktionen verwendet, und daher konnte die Größe des BIOS-Codesmöglicherweiseentsprechen zumindest teilweise der Leistung, aber in modernen Computern wurde das BIOS im Wesentlichen auf die Rolle eines Betriebssystems reduziertBootstrapperund eine Low-Level-Hardware-Konfigurationsschnittstelle. Außerdem konnte der BIOS-Code bei den Computern dieser Ära, wenn überhaupt, nur durch physisches Entfernen und Neuinstallieren von ROM-Chips auf der Hauptplatine ersetzt werden.Flash-aktualisierbare BIOSesind eine viel spätere Erfindung.

Vergleichen Sie dies mit der Ermittlung der Größe von Speichergeräten oder RAM. Der Unterschied besteht darin, dassDie Möglichkeit, deren Größe zu erkennen, verrät Ihnen als Benutzer tatsächlich etwas Wissenswertes:Die Menge des verfügbaren Speicherplatzes (pro Gerät oder insgesamt) ist ein entscheidender Faktor dafür, wie viele Daten Sie auf dem Computer speichern können. Die Größe des RAM ist einer der entscheidenden Faktoren dafür, mit wie vielen Daten Sie gleichzeitig arbeiten können und wie schnell Sie mit diesen Daten arbeiten können.

Dudürfen,Gehen Sie im Prinzip auf die Website eines bestimmten Motherboard-Herstellers und suchen Sie nach herunterladbaren BIOS-Update-Images. Die Größe dieser Image-Dateien entspricht mit hoher Wahrscheinlichkeit der Größe des Flash-ROM-Chips, der den BIOS-Code enthält.auf diesem bestimmten Motherboard.Ich glaube, eine heutzutage übliche Größe liegt im Bereich einiger Megabyte;Das ursprüngliche IBM 5150 PC BIOS war 8 KB großund beginnend mit dem XT (IBM 5160) wurde dieser Wert bei IBMs auf 32 KB erhöht. Ich habe irgendwo eine Anekdote gelesen, dass die Beteiligten sich bei den frühen IBM PC BIOS-Klonen aus Reinräumen zumindest einmal gefragt haben, ob sie etwas übersehen hatten, da sie es mit deutlich weniger Code erstellen konnten.

Und natürlich wird dabei die Möglichkeit völlig außer Acht gelassen,es gibt andere Firmware im Systemneben dem PC-BIOS. Grafikkarten, Netzwerkkarten, Festplattencontrollerkarten und alle möglichen anderen Peripheriegerätestellen ihre eigenen BIOS zur Verfügungdie aus Implementierungssicht vollständig vom PC-BIOS auf der Hauptplatine getrennt sind, genauso wie ein Webbrowser vollständig vom Betriebssystem getrennt ist (oder sein sollte).

Antwort3

Unter Linux können Sie die Kapazität eines Flash-ROMs auf viele Arten ermitteln. Der Befehl dmidecode liefert viele nützliche Informationen über das BIOS, einschließlich der Chipkapazität. Ich habe schließlich herausgefunden, dass es 1 MB ist. Ich empfehle jedem, entweder einen Blick auf sein Motherboard zu werfen oder eine Live-CD mit Linux auszuprobieren.

verwandte Informationen