Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как получить информацию о BIOS в Windows NT/2000/XP?

01.01.2007

В NT/2000/XP не получится прочитать значения прямо из BIOS, однако, ничего не мешает нам считать нужные значения из реестра.

procedure TBIOSInfo.GetRegInfoWinNT; 
var 
  Registryv       : TRegistry; 
  RegPath         : string; 
  sl              : TStrings; 
begin 
  Params.Clear; 
 
  RegPath := '\HARDWARE\DESCRIPTION\System'; 
  registryv:=tregistry.Create; 
  registryv.rootkey:=HKEY_LOCAL_MACHINE; 
  sl := nil; 
  try 
    registryv.Openkey(RegPath,false); 
    ShowMessage('BIOS Date: '+RegistryV.ReadString('SystemBiosDate')); 
    sl := ReadMultirowKey(RegistryV,'SystemBiosVersion'); 
    ShowMessage('BIOS Version: '+sl.Text); 
  except 
  end; 
  Registryv.Free; 
  if Assigned(sl) then sl.Free; 
end;

/следующий метод получает многострочные значения из реестра
//и преобразует их в TStringlist
function ReadMultirowKey(reg: TRegistry; Key: string): TStrings; 
const bufsize = 100; 
var 
  i: integer; 
  s1: string; 
  sl: TStringList; 
  bin: array[1..bufsize] of char; 
begin 
  try 
    result := nil; 
    sl := nil; 
    sl := TStringList.Create; 
    if not Assigned(reg) then 
      raise Exception.Create('TRegistry object not assigned.'); 
    FillChar(bin,bufsize,#0); 
    reg.ReadBinaryData(Key,bin,bufsize); 
    i := 1; 
    s1 := ''; 
    while i < bufsize do 
    begin 
      if ord(bin[i]) >= 32 then 
        s1 := s1 + bin[i] 
      else 
      begin 
        if Length(s1) > 0 then 
        begin 
          sl.Add(s1); 
          s1 := ''; 
        end; 
      end; 
      inc(i); 
    end; 
    result := sl; 
  except 
    sl.Free; 
    raise; 
  end; 
end;

Взято из https://forum.sources.ru