怎样取得BIOS序列号

解决方案 »

  1.   

    不知道对你有用没
     BIOS信息    
      在计算机的CMOS(Complementary Metal-Oxide Semiconductor)中存有计算机的配置信息,如时间、驱动器、内存等。由于不同的厂家出的BIOS,其中还有一些厂家自己的东西。但在一些基本信息上是一致的,除了提供一些通常的应用,如为操作系统、系统诊断软件等提供信息,现在也用在如共享软件的密码保护等地方。 
    存取控制CMOS的数据存取的可以分两步,先向端口70H(H表示十六进制,下同)写入要操作数据的偏移量,然后在71H上读取数值或者向71H写入数值进行赋值。如读取当前时间的小时的值:1. Out 70H <--- 4 , 小时的地址偏移量为4;2. In 71H ----> 变量为保证操作的地址正确,应在修改之前暂停中断,防止一些针对CMOS的中断修改70H中的地址值。各存储量的地址时间和日期偏移量 对应内容00H 当前时间的秒01H 定时器秒02H 当前时间的分钟03H 定时器分钟04H 当前时间的小时05H 定时器小时06H 星期几07H 一个月的第几天08H 一年的第几个月09H 当前年份系统参数偏移量 对应内容10H 软盘驱动器类型第7-4位(bit)对应A驱,第3-0位(bit)对应B驱相应位上的值:000 ----- 无 001 ----- 360K 010 ----- 1.2M 011 ----- 720K 100 ----- 1.44M101 ----- 2.88M14H 设备类型第7-6位表明了软磁盘驱动器的数量:00 ----- 一个磁盘驱动器 01 ----- 两个磁盘驱动器第5-4位表明显示器类型00 ----- 未定义 01 ----- 彩色,40列 10 ----- 彩色,80列 11 ----- 单显第3-2位,保留第1位为1表示有协处理器第0位为0表示安装了软磁盘驱动器15H 基本内存(Base Memory)大小的低字节,单位为K16H 基本内存(Base Memory)大小的高字节,单位为K17H 扩展内存(Expanded Memory)大小的低字节,单位为K18H 扩展内存(Expanded Memory)大小的高字节,单位为K19H 第一个物理硬盘的扩展驱动器类型1AH 第二个物理硬盘的扩展驱动器类型 
     
      

  2.   

    function GetBios(value: integer): String;// 1...Bios Type// 2.. Bios Copyright// 3.. Bios Date// 4.. Bios Extended Info// 5.. Bustype// 6.. MachineTypebeginresult:='(unavailable)';case value of1: result:=String(Pchar(Ptr($FE061)));2: result:=String(Pchar(Ptr($FE091)));3: result:=String(Pchar(Ptr($FFFF5)));4: result:=String(Pchar(Ptr($FEC71)));end;end;
      

  3.   

    uses SHA1, Base64;   function GetHashedBiosInfo: string; 
      var 
        SHA1Context: TSHA1Context; 
        SHA1Digest: TSHA1Digest; 
      begin 
        // Get the BIOS data 
        SetString(Result, PChar(Ptr($F0000)), $10000); 
        // Hash the string 
        SHA1Init(SHA1Context); 
        SHA1Update(SHA1Context, PChar(Result), Length(Result)); 
        SHA1Final(SHA1Context, SHA1Digest); 
        SetString(Result, PChar(@SHA1Digest), sizeof(SHA1Digest)); 
        // Return the hash string encoded in printable characters 
        Result := B64Encode(Result); 
      end; 
      function GetBiosInfoAsText: string; 
      var 
        p, q: pchar; 
      begin 
        q := nil; 
        p := PChar(Ptr($FE000)); 
        repeat 
          if q <> nil then begin 
            if not (p^ in [#10, #13, #32..#126, #169, #184]) then begin 
              if (p^ = #0) and (p - q >= 8) then begin 
                Result := Result + TrimRight(String(q)) + #13#10; 
              end; 
              q := nil; 
            end; 
          end else 
            if p^ in [#33..#126, #169, #184] then 
              q := p; 
          inc(p); 
        until p > PChar(Ptr($FFFFF)); 
        Result := TrimRight(Result); 
      end;   procedure TForm1.FormCreate(Sender: TObject); 
      begin 
        Memo1.Lines.Text := GetBiosInfoAsText; 
      end; 
      

  4.   

    with Memo1.Lines do 
    begin 
    Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061)))); 
    Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091)))); 
    Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5)))); 
    Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71)))); 
    end;
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses bioshelp;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      RBD: TRomBiosDump;
    begin
      if ReadRomBios(RBD, rrbmAutomatic) then
      begin
        edit1.Text := GetRomBiosString(RBD, Ptr($ffff5));  // bios date
        edit2.Text := GetRomBiosString(RBD, Ptr($ffa68));  // bios name
        edit3.Text := GetRomBiosString(RBD, Ptr($fe061));  // bios version
        edit4.Text := GetRomBiosString(RBD, Ptr($FEC71));  // bios serial number
        edit5.Text := GetRomBiosString(RBD, Ptr($fe091));  // bios copyringht
      end
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Close;
    end;end.