Função para pegar o serial físico do hd, e não o serial do volume do hd, pois o serial do volume do hd sempre que o hd é formatado ele muda e também fazendo uma copia do hd pelo ghost esse número do volume também é copiado. Então para um controle do programa o ideal é pegar
o serial físico do hd. { procedure utilizada pela função que pega o serial do hd }
procedure ChangeByteOrder( var Data; Size : Integer ); var
ptr : PChar;
i : Integer;
c : Char; begin
ptr := @Data; for i := 0 to (Size shr 1)-1 do begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2); end; end;
{ função que pega o serial number FÍSICO do HD e retorna string }
function GetIdeDiskSerialNumber : String; type
TSrbIoControl =packedrecord
HeaderLength: ULONG;
Signature: Array[0..7] of Char;
Timeout: ULONG;
ControlCode: ULONG;
ReturnCode: ULONG;
Length: ULONG; end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;
TIDERegs =packedrecord
bFeaturesReg : Byte; // especificar "comandos" SMART
bSectorCountReg : Byte; // registro de contador de setor
bSectorNumberReg : Byte; // registro de número de setores
bCylLowReg : Byte; // valor de cilindro (byte mais baixo)
bCylHighReg : Byte; // valor de cilindro (byte mais alto)
bDriveHeadReg : Byte; // registro de drive/cabeça
bCommandReg : Byte; // comando IDE
bReserved : Byte; // reservado- tem que ser zero end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;