下面有篇文章,你自己慢慢看吧.Hard disk serial number
Question
Is there anyone who knows how to obtain the hard disk serial number?
Answer
I have an unit to get the Hd Name and the Hd Serial number for Borland
Pascal 7.0. I don't know if it's working with Delphi and the other thing is
that it is in dutch and I don't have time to translate it in englisch. Mayby
you can use it, otherwise drop it out of the window.
Unit HardDisk;
INTERFACE
FUNCTION  GetHardDiskNaam   : STRING;
FUNCTION  GetHardDiskSerieNummer        : STRING;
FUNCTION  GetHardDiskControlleNummer    : STRING;
PROCEDURE GetHardDiskGegevens;
CONST
  CodeerTabel : ARRAY[0..24] OF BYTE =
(3,1,2,1,4,1,3,2,6,4,6,5,1,2,6,4,2,6,3,4,6,2,4,1,2);
TYPE
  CharArray = ARRAY[0..24] OF CHAR;
VAR
  HardDiskGegevens          : ARRAY[1..256] OF INTEGER;
  HardDiskNaam  : CharArray;
  SerieNummer   : CharArray;
  ControlleNummer           : CharArray;
  C_HardDiskNaam: STRING;
  C_HardDiskSerieNummer     : STRING;
  C_HardDiskControlleNummer : STRING;
  C_LicentieNaam: STRING;
IMPLEMENTATION
 FUNCTION GetHardDiskNaam : STRING;
 VAR
   Teller : INTEGER;
   Lus    : INTEGER;
 BEGIN
    GetHardDiskNaam := '';
    Teller := 1;
    FOR Lus := 1 TO 18 DO
    BEGIN
      HardDiskNaam[Teller] := CHR( ( HardDiskGegevens[27+Lus] DIV 256 ));
      Inc(Teller);
      HardDiskNaam[Teller] := CHR( ( HardDiskGegevens[27+Lus] MOD 256 ));
      Inc(Teller);
    END;
    GetHardDiskNaam := HardDiskNaam;
 END;
 FUNCTION GetHardDiskSerieNummer : STRING;
 VAR
   Teller : INTEGER;
   Lus    : INTEGER;
 BEGIN
    GetHardDiskSerieNummer := '';
    Teller := 1;
    FOR Lus := 1 TO 8 DO
    BEGIN
      SerieNummer[Teller] := CHR( ( HardDiskGegevens[10+Lus] DIV 256 ));
      Inc(Teller);
      SerieNummer[Teller] := CHR( ( HardDiskGegevens[10+Lus] MOD 256 ));
      Inc(Teller);
    END;
    GetHardDiskSerieNummer := SerieNummer;
 END;
 FUNCTION GetHardDiskControlleNummer : STRING;
 VAR
   Teller : INTEGER;
   Lus    : INTEGER;
 BEGIN
    GetHardDiskControlleNummer := '';
    Teller := 1;
    FOR Lus := 1 TO 3 DO
    BEGIN
      ControlleNummer[Teller] := CHR( ( HardDiskGegevens[23+Lus] DIV 256 ));
      Inc(Teller);
      ControlleNummer[Teller] := CHR( ( HardDiskGegevens[23+Lus] MOD 256 ));
      Inc(Teller);
    END;
    GetHardDiskControlleNummer := ControlleNummer;
 END;
 PROCEDURE GetHardDiskGegevens;
 VAR
   Lus    : INTEGER;
 BEGIN
   WHILE ( Port[$1f7] <> $50) DO ;
   Port[$1F6] := $A0 ;
   Port[$1F7] := $EC ;
   WHILE ( Port[$1f7] <> $58 ) DO ;
   FOR Lus := 1 TO 256 DO
   BEGIN
     HardDiskGegevens[Lus] := Portw[$1F0] ;
   END;
 END;
END.

解决方案 »

  1.   

    PROCEDURE GetHardDiskGegevens;
    VAR
      Lus    : INTEGER;
    BEGIN
      WHILE ( Port[$1f7] <> $50) DO ;
      Port[$1F6] := $A0 ;
      Port[$1F7] := $EC ;
      WHILE ( Port[$1f7] <> $58 ) DO ;
      FOR Lus := 1 TO 256 DO
      BEGIN
        HardDiskGegevens[Lus] := Portw[$1F0] ;
      END;
    END;
    //to delfly
    port[]是什么东西。
      

  2.   

    获取硬盘型号、序列号、修订号.....
    请访问 http://www.csdn.net/cnshare/soft/soft4806.shtm
      

  3.   

    硬盘的序列号加密吗?有个网友做了个DLL,但是有的硬盘是没有序列号的!还是没有用的!
      

  4.   

    硬盘的序列号加密吗?有个网友做了个DLL,但是有的硬盘是没有序列号的!还是没有用的!
    OICQ:233018
      

  5.   

    有一个 WIN32 API ::GetVolumeInformation
    我以前用过,还可以,呵呵