Ceci est une ancienne révision du document !
Identifier de manière unique un disque dur
Pour l'instant, sur cette page, ce ne sont que des pistes
Préambule
Le but est d'identifié de manière unique un disque dur physique, quelque soit son contenu ou formatage.
J'entends par disque dur, un DiskDrive, un disque SATA, SSD une clé USB.
Tout ce qui peut etre accessible via un \\PHYSICALDRIVEx\
Approche WMI
En WMI il y a les classes Win32_DiskDrive
, MSFT_PhysicalDisk
et MSFT_Disk
(et peut etre d'autres) qui décrivent les disks
Win32_DiskDrive
Les propriétées interessantes sont :
- “Caption” : “ST2000DM001-1ER164”,
- “Model” : “ST2000DM001-1ER164”,
- “SerialNumber” : “ W4Z3A36Q”,
- “Signature” : “1431655765”,
- “Size” : “2000396321280”,
Classe WMI Win32_DiskDrive show{ “__PATH” : “\\\\PC-THIERRY\\root\\CIMV2:Win32_DiskDrive.DeviceID=\”\\\\\\\\.\\\\PHYSICALDRIVE0\“”, “__NAMESPACE” : “root\\CIMV2”, “__SERVER” : “PC-THIERRY”, “__DERIVATION” : [ “CIM_DiskDrive” ], “__PROPERTY_COUNT” : “51”, “__RELPATH” : “Win32_DiskDrive.DeviceID=\”\\\\\\\\.\\\\PHYSICALDRIVE0\“”, “__DYNASTY” : “CIM_ManagedSystemElement”, “__SUPERCLASS” : “CIM_DiskDrive”, “__CLASS” : “Win32_DiskDrive”, “__GENUS” : “2”, “BytesPerSector” : “512”, “Capabilities” : [ “3” ], “CapabilityDescriptions” : [ “Random Access” ], “Caption” : “ST2000DM001-1ER164”, “ConfigManagerErrorCode” : “0”, “ConfigManagerUserConfig” : “False”, “CreationClassName” : “Win32_DiskDrive”, “Description” : “Lecteur de disque”, “DeviceID” : “\\\\.\\PHYSICALDRIVE0”, “FirmwareRevision” : “CC61”, “Index” : “0”, “InterfaceType” : “IDE”, “Manufacturer” : “(Lecteurs de disque standard)”, “MediaLoaded” : “True”, “MediaType” : “Fixed hard disk media”, “Model” : “ST2000DM001-1ER164”, “Name” : “\\\\.\\PHYSICALDRIVE0”, “Partitions” : “1”, “PNPDeviceID” : “SCSI\\DISK&VEN_ST2000DM&PROD_001-1ER164\\4&61B3D44&0&000000”, “SCSIBus” : “0”, “SCSILogicalUnit” : “0”, “SCSIPort” : “0”, “SCSITargetId” : “0”, “SectorsPerTrack” : “63”, “SerialNumber” : “ W4Z3A36Q”, “Signature” : “1431655765”, “Size” : “2000396321280”, “Status” : “OK”, “SystemCreationClassName” : “Win32_ComputerSystem”, “SystemName” : “PC-THIERRY”, “TotalCylinders” : “243201”, “TotalHeads” : “255”, “TotalSectors” : “3907024065”, “TotalTracks” : “62016255”, “TracksPerCylinder” : “255” },
MSFT_PhysicalDisk
Les propriétées interessantes sont :
- “FriendlyName” : “ST2000DM001-1ER164”,
- “Model” : “ST2000DM001-1ER164”,
- “SerialNumber” : “W4Z3A36Q”,
- “Size” : “2000398934016”,
- “UniqueId” : “5000C5008A988D69”,
- “UniqueIdFormat” : “3”,
Classe WMI : MSFT_PhysicalDisk show{ “__PATH” : “\\\\PC-THIERRY\\root\\Microsoft\\Windows\\Storage:MSFT_PhysicalDisk.ObjectId=\”{1}\\\\\\\\PC-THIERRY\\\\root/Microsoft/Windows/Storage/Providers_v2\\\\SPACES_PhysicalDisk.ObjectId=\\\“{6e6eee87-74ee-11e9-8b27-806e6f6e6963}:PD:{fd43b0d7-925e-cab8-0064-a31028c2c230}\\\”\“”, “__NAMESPACE” : “root\\Microsoft\\Windows\\Storage”, “__SERVER” : “PC-THIERRY”, “__DERIVATION” : [ “MSFT_StorageFaultDomain” ], “__PROPERTY_COUNT” : “39”, “__RELPATH” : “MSFT_PhysicalDisk.ObjectId=\”{1}\\\\\\\\PC-THIERRY\\\\root/Microsoft/Windows/Storage/Providers_v2\\\\SPACES_PhysicalDisk.ObjectId=\\\“{6e6eee87-74ee-11e9-8b27-806e6f6e6963}:PD:{fd43b0d7-925e-cab8-0064-a31028c2c230}\\\”\“”, “__DYNASTY” : “MSFT_StorageObject”, “__SUPERCLASS” : “MSFT_StorageFaultDomain”, “__CLASS” : “MSFT_PhysicalDisk”, “__GENUS” : “2”, “AllocatedSize” : “2000398934016”, “BusType” : “11”, “CannotPoolReason” : [ “7” ], “CanPool” : “False”, “DeviceId” : “0”, “FirmwareVersion” : “CC61”, “FriendlyName” : “ST2000DM001-1ER164”, “HealthStatus” : “0”, “IsPartial” : “True”, “LogicalSectorSize” : “512”, “MediaType” : “3”, “Model” : “ST2000DM001-1ER164”, “ObjectId” : “{1}\\\\PC-THIERRY\\root/Microsoft/Windows/Storage/Providers_v2\\SPACES_PhysicalDisk.ObjectId=\”{6e6eee87-74ee-11e9-8b27-806e6f6e6963}:PD:{fd43b0d7-925e-cab8-0064-a31028c2c230}\“”, “OperationalStatus” : [ “2” ], “PhysicalLocation” : “Integrated : Bus 0 : Device 23 : Function 0 : Adapter 0 : Port 0”, “PhysicalSectorSize” : “4096”, “SerialNumber” : “W4Z3A36Q”, “Size” : “2000398934016”, “SpindleSpeed” : “-1”, “SupportedUsages” : [ “1” ], “UniqueId” : “5000C5008A988D69”, “UniqueIdFormat” : “3”, “Usage” : “1”, “VirtualDiskFootprint” : “0” },
MSFT_Disk
Classe WMI : MSFT_Disk show{ “__PATH” : “\\\\PC-THIERRY\\root\\Microsoft\\Windows\\Storage:MSFT_Disk.ObjectId=\”{1}\\\\\\\\PC-THIERRY\\\\root/Microsoft/Windows/Storage/Providers_v2\\\\WSP_Disk.ObjectId=\\\“{6e6eee87-74ee-11e9-8b27-806e6f6e6963}:DI:\\\\\\\\?\\\\scsi#disk&ven_st2000dm&prod_001-1er164#4&61b3d44&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\\\”\“”, “__NAMESPACE” : “root\\Microsoft\\Windows\\Storage”, “__SERVER” : “PC-THIERRY”, “__DERIVATION” : [ “MSFT_StorageObject” ], “__PROPERTY_COUNT” : “38”, “__RELPATH” : “MSFT_Disk.ObjectId=\”{1}\\\\\\\\PC-THIERRY\\\\root/Microsoft/Windows/Storage/Providers_v2\\\\WSP_Disk.ObjectId=\\\“{6e6eee87-74ee-11e9-8b27-806e6f6e6963}:DI:\\\\\\\\?\\\\scsi#disk&ven_st2000dm&prod_001-1er164#4&61b3d44&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\\\”\“”, “__DYNASTY” : “MSFT_StorageObject”, “__SUPERCLASS” : “MSFT_StorageObject”, “__CLASS” : “MSFT_Disk”, “__GENUS” : “2”, “AllocatedSize” : “2000398934016”, “BootFromDisk” : “False”, “BusType” : “11”, “FirmwareVersion” : “CC61”, “FriendlyName” : “ST2000DM001-1ER164”, “HealthStatus” : “0”, “IsBoot” : “False”, “IsClustered” : “False”, “IsHighlyAvailable” : “False”, “IsOffline” : “False”, “IsReadOnly” : “False”, “IsScaleOut” : “False”, “IsSystem” : “False”, “LargestFreeExtent” : “0”, “Location” : “Integrated : Bus 0 : Device 23 : Function 0 : Adapter 0 : Port 0”, “LogicalSectorSize” : “512”, “Model” : “ST2000DM001-1ER164”, “Number” : “0”, “NumberOfPartitions” : “1”, “ObjectId” : “{1}\\\\PC-THIERRY\\root/Microsoft/Windows/Storage/Providers_v2\\WSP_Disk.ObjectId=\”{6e6eee87-74ee-11e9-8b27-806e6f6e6963}:DI:\\\\?\\scsi#disk&ven_st2000dm&prod_001-1er164#4&61b3d44&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\“”, “OfflineReason” : “0”, “OperationalStatus” : [ “53264” ], “PartitionStyle” : “1”, “Path” : “\\\\?\\scsi#disk&ven_st2000dm&prod_001-1er164#4&61b3d44&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}”, “PhysicalSectorSize” : “4096”, “ProvisioningType” : “2”, “SerialNumber” : “ W4Z3A36Q”, “Signature” : “1431655765”, “Size” : “2000398934016”, “UniqueId” : “5000C5008A988D69”, “UniqueIdFormat” : “3” }
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é.