Hola Tortuguica.
El número de serie lógico dado por MS-DOS/Windows a un disco rígido, está compuesto por ocho dígitos hexadecimales.
Te agrego otra función para obtenerlo:
Código Delphi
[-]
function HDSerial(const lpRootPathName: PChar): string;
var
lpMaximumComponentLength: DWORD;
lpFileSystemFlags: DWORD;
lpVolumeSerialNumber: DWORD;
lpVolumeNameBuffer: array[0..MAX_PATH] of Char;
begin
GetVolumeInformation(PChar(lpRootPathName),
@lpVolumeNameBuffer,
SizeOf(lpVolumeNameBuffer),
@lpVolumeSerialNumber,
lpMaximumComponentLength,
lpFileSystemFlags, nil, 0);
Result := IntToHex(HiWord(lpVolumeSerialNumber),4) +
IntToHex(LoWord(lpVolumeSerialNumber),4);
end;
Llamada de ejemplo:
Código Delphi
[-]
ShowMessage(HDSerial('C:\'));
Si te interesa guardarlo cifrado en el registro, puse un ejemplo muy simple de como hacerlo al final de este hilo:
Guardar datos en un ejecutable
Un saludo.
Edito: El argumento debe ser 'Letra_Unidad:
\' no 'Letra_Unidad:'. Por ejemplo: 'D:
\' es correcto, 'D:' no.