Ceci est une ancienne révision du document !
Identifier de manière unique un disque dur
STORAGE_DEVICE_UNIQUE_IDENTIFIER
ChatGPT me sort un programme :
program project1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, {$ENDIF} Classes, crt, SysUtils, Windows; { you can add units after this } const IOCTL_STORAGE_QUERY_PROPERTY = $002D1400; type TStoragePropertyQuery = record PropertyId: DWORD; QueryType: DWORD; AdditionalParameters: array [0..15] of byte; end; TStorageDeviceIDDescriptor = record Version: DWORD; Size: DWORD; Identifiers: array [0..0] of byte; end; var hDevice: THandle; query: TStoragePropertyQuery; descriptor: TStorageDeviceIDDescriptor; bytesReturned: DWORD; ch: char; begin // Ouvrir le périphérique de stockage hDevice := CreateFile(pchar('\\.\PhysicalDrive0'), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if hDevice = INVALID_HANDLE_VALUE then begin Writeln('Impossible d''ouvrir le périphérique de stockage.'); Exit; end; try // Préparer la requête pour la propriété STORAGE_DEVICE_UNIQUE_IDENTIFIER query.PropertyId := 0 {StorageDeviceProperty}; query.QueryType := 0 {PropertyStandardQuery}; // Obtenir la propriété STORAGE_DEVICE_UNIQUE_IDENTIFIER if not DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, @query, SizeOf(query), @descriptor, SizeOf(descriptor), bytesReturned, nil) then begin Writeln('Erreur lors de la récupération de la propriété STORAGE_DEVICE_UNIQUE_IDENTIFIER.'); Exit; end; // Afficher l'identifiant unique du périphérique de stockage Writeln('Identifiant unique du périphérique de stockage:'); Writeln(Format('%s', [PChar(@descriptor.Identifiers)])); //Writeln(Format('%.*s', [descriptor.Size, @descriptor.Identifiers])); finally // Fermer le périphérique de stockage CloseHandle(hDevice); end; ch:=ReadKey; end.
Mais il y a un problème a l'affichage… j'ai pas le temps de voir pourquoi !
Il faut exécuter le programme en mode admin.
Sources & Ressources
Vous pourriez laisser un commentaire si vous étiez connecté.