Lendo informações do SMBIOS

Lendo informações do SMBIOS

No Windows, como posso ver a capacidade do chip ROM instalado no meu computador para armazenar UEFI/BIOS? Eu preferiria usar uma ferramenta ou comando do Windows sem instalar nenhum outro aplicativo.

Responder1

Lendo informações do SMBIOS

Da Wikipédia:

EmInformática, oBIOS de gerenciamento do sistema(SMBIOS) especificação defineestruturas de dados(e métodos de acesso) que podem ser usados ​​para ler informações armazenadas noBIOSde umcomputador. Por volta de 1999, passou a fazer parte do domínio doForça-tarefa de gerenciamento distribuído(DMTF). [...] aproximadamente ao mesmo tempoMicrosoftcomeçou a exigir issoOEMse os fornecedores de BIOS oferecem suporte à interface/conjunto de dados para que a Microsoftcertificação.

Fonte:BIOS de gerenciamento do sistema

As informações do SMBIOS são armazenadas em diferentes tabelas de dados; o primeiro (tipo 0) contém detalhes básicos como fornecedor, versão e data de lançamento. O tamanho do dispositivo físico que contém o BIOS corresponde a um único byte localizado emofender 0x9da referida tabela.

O tamanho real pode ser calculado assim:

64K * (value + 1)

Um valor de 0significa que o tamanho é 64KiB, 1significa 128 KiB e assim por diante.

Pelo que eu sei, o Windows não fornece um utilitário integrado que possa recuperar dados SMBIOS específicos, como o tamanho da ROM. Você ainda pode escrever um roteiro sozinho; veja abaixo alguns exemplos de trabalho. Como alternativa, você pode usar um programa de terceiros, por exemplo, umdmidecodePorta Windows.


Script em lote

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

Observações

A Instrumentação de Gerenciamento do Windows (WMI) é o método preferido para ler informações do SMBIOS no Windows.

Fonte:Dispositivo\Objeto de memória física

O driver [SMBIOS] também armazena essas informações no registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data. Embora as informações do SMBIOS sejam armazenadas no registro neste local, os consumidores devem continuar a usar o WMI ou a GetSystemFirmwareTable()API para recuperar dados do SMBIOS. Não há garantia de que essas informações serão armazenadas nessa subchave do Registro para cada versão subsequente do Windows.

Fonte:Suporte SMBIOS no Windows

Leitura adicional

Responder2

Eu não acho que você pode,pelo menos não de uma forma geral.

Basicamente, isso é porqueo tamanho do código BIOS não fornece nenhuma informação útilpara você, o usuário.O BIOS em um computador compatível com IBM PCtem algumas responsabilidades principais, a maioria das quais também se aplica a outras plataformas, mas podem ser implementadas de forma diferente:

  • Ele executa o autoteste de inicialização (POST)
  • Ele faz detecção e inicialização básicas de hardware
  • Ele configura o ambiente básico de execução, cujas especificidades remontam aoPC original IBM 5150de 1981 (a CPU está emmodo real, vários registradores da CPU são inicializados com valores conhecidos e vários flags da CPU são configurados com valores conhecidos)
  • Ele fornece um sistema operacional com recursos (muito primitivos) de acesso e detecção de hardware; estes não são utilizados pelos sistemas operacionais modernos, seja devido a restrições técnicas da CPU (não há uma maneira fácil de sair domodo longo, por exemplo) ou devido a restrições de desempenho (alternar entre valores reais ouModo V86executar o código BIOS de 16 bits leva muito tempo, por isso é mais rápido permanecer no modo protegido ou longo e fazer você mesmo no sistema operacional)
  • Ele carrega o carregador de inicialização de primeiro estágio do sistema operacional em um local fixo e conhecido na RAM e transfere a execução para ele
  • Ele fornece uma interface de usuário para definir configurações básicas do sistema; estritamente falando, isso é opcional eBIOSes da década de 1980 muitas vezes nãofornecer tal interface, em vez disso, contando comsoftware enviado separadamenteou em hardwareChaves DIPpara definir configurações básicas do sistema, como tipo de placa gráfica e quantidade de RAM instalada

Em nada disso há qualquer benefício para o usuário em saber quanto código é usado para implementar essas tarefas. Nos primeiros dias (estamos falando do DOS antes do Windows 3.0 a 3.1 aqui, do início dos anos 1980 ao início dos anos 1990), o BIOS era frequentemente usado para executar funções básicas e, portanto, o tamanho do código do BIOS poderiapotencialmentecorrespondem, pelo menos em parte, ao desempenho, mas nos computadores modernos, o BIOS foi relegado basicamente ao papel de um sistema operacionalbootstrappere interface de configuração de hardware de baixo nível. Além disso, nos computadores daquela época, se o código do BIOS pudesse ser substituído, isso seria removendo e reinstalando fisicamente os chips ROM na placa-mãe;BIOS atualizáveis ​​em flashsão uma invenção muito posterior.

Você compara isso com a descoberta do tamanho dos dispositivos de armazenamento ou RAM. A diferença é queser capaz de saber o tamanho deles realmente diz a você, usuário, algo que vale a pena saber:a quantidade de espaço de armazenamento disponível, por dispositivo ou em conjunto, é um fator determinante para a quantidade de dados que você poderá armazenar no computador, e o tamanho da RAM é um dos fatores determinantes para a quantidade de dados que você poderá armazenar no computador. dados com os quais você pode trabalhar ao mesmo tempo e quão rápido será trabalhar com esses dados.

Vocêpode,em princípio, acesse o site de um fabricante de placa-mãe específico e procure imagens de atualização do BIOS para download. O tamanho desses arquivos de imagem corresponderá, com um alto grau de certeza, ao tamanho do chip ROM flash que contém o código do BIOS.naquela placa-mãe específica.Acho que um tamanho comum hoje é da ordem de alguns megabytes;o BIOS original do PC IBM 5150 tinha 8 KBe começando com o XT (IBM 5160) isso foi aumentado para 32 KB em IBMs. Eu li em algum lugar uma anedota de que os primeiros clones de BIOS do IBM PC de sala limpa, pelo menos uma vez, fizeram as pessoas envolvidas se perguntarem se estavam faltando alguma coisa, pois eram capazes de fazer isso com muito menos código.

E, claro, isso ignora completamente a possibilidade dehavendo outro firmware no sistemaalém do BIOS do PC. Placas gráficas, placas de rede, placas controladoras de disco e todos os tipos de outros periféricosfornecem seus próprios BIOSesque do ponto de vista da implementação são completamente separados do BIOS do PC na placa-mãe, assim como um navegador da web é (ou deveria ser) completamente separado do sistema operacional.

Responder3

No Linux você pode encontrar a capacidade do flash rom de várias maneiras. O comando dmidecode fornece muitas informações úteis sobre o BIOS, incluindo a capacidade do chip. Finalmente descobri que tem 1 MB. Sugiro a todos que dêem uma olhada em sua placa-mãe ou experimentem um live CD com Linux.

informação relacionada