Existe-t-il un moyen facile d'obtenir le numéro de série de tous les disques durs d'un PC en utilisant l'API Win32?Comment obtenir le numéro de série des disques durs?
Répondre
GetVolumeInformation est votre ami.
GetVolumeInformation() ne vous donnera que le numéro de série du volume. Volume du disque! = Disque dur. La série de volumes est généralement un horodatage 32 bits à partir du moment où le disque a été formaté. –
Vous avez raison. –
L'ID de volume est 101% non fiable car il peut être facilement changé! – Ampere
GetVolumeInformation
vous donnera des informations uniquement sur la partition ou le volume , pas tout disque dur.
Vous devez utiliser la fonction DeviceIoControl
pour obtenir des informations.
Voici le code possible:
#include <atlstr.h>
#include <Windows.h>
#include <winioctl.h>
BOOL getSerial(CString diskSerial) {
BOOL bResult = FALSE;
STORAGE_PROPERTY_QUERY storagePropertyQuery;
STORAGE_DESCRIPTOR_HEADER storageDescHeader = { 0 };
STORAGE_DEVICE_DESCRIPTOR *pDeviceDesc;
DWORD dwBytes = 0;
DWORD dwOutBufferSize = 0;
DWORD dwSerialNumberOffset = 0;
BYTE *pOutBuffer = nullptr;
ZeroMemory(&storagePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY));
storagePropertyQuery.PropertyId = StorageDeviceProperty;
storagePropertyQuery.QueryType = PropertyStandardQuery;
HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive0", 0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
std::cout << "Can't get access to HDD.\nTerminating." << std::endl;
exit(EXIT_FAILURE);
}
bResult = DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY,
&storagePropertyQuery, sizeof(storagePropertyQuery),
&storageDescHeader, sizeof(storageDescHeader),
&dwBytes, NULL);
dwOutBufferSize = storageDescHeader.Size;
try {
pOutBuffer = new BYTE[dwOutBufferSize];
ZeroMemory(pOutBuffer, sizeof(pOutBuffer));
} catch (std::bad_alloc exp) {
CloseHandle(hDevice);
std::cout << exp.what() << std::endl;
return FALSE;
}
bResult = DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY,
&storagePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
pOutBuffer, dwOutBufferSize, &dwBytes, NULL);
pDeviceDesc = (STORAGE_DEVICE_DESCRIPTOR *)pOutBuffer;
dwSerialNumberOffset = pDeviceDesc->SerialNumberOffset;
diskSerial = CString(pOutBuffer + dwSerialNumberOffset);
std::cout << "Serial Number: " << diskSerial << std::endl;
delete[] pOutBuffer;
CloseHandle(hDevice);
return TRUE;
}
Si vous avez plus d'1 disques durs installés, u devrait changer "\\\\.\\PhysicalDrive0"
à "\\\\.\\PhysicalDrive1"
etc.
Cela peut être une réponse à la question. Ce sera mieux si vous mettez un exemple (pour le futur lecteur, au cas où le lien se casse) –
@PriyeshKumar Merci pour le conseil, je suis juste nouveau à stackoverflow. – johnbrovi
- 1. Comment énumérer les disques durs
- 2. en utilisant C# comment extraire des informations sur les disques durs présents sur la machine locale
- 3. Comment obtenir le numéro de série du disque dur
- 4. Hdd Numéro de série
- 5. Appel Pinvoke pour obtenir le numéro de série de Windows?
- 6. Quel ensemble d'autorisations d'accès sur le contenu des disques durs USB garantira la portabilité dans Windows?
- 7. Sélectionnez des extensions de type de fichier distinctes sur tous les disques durs?
- 8. Comment obtenir le numéro de série de la clé USB en C#
- 9. Comment obtenir la liste des disques amovibles dans C#?
- 10. Logiciel d'équilibrage de charge/cluster qui affiche plusieurs disques durs en un seul
- 11. Comment utiliser C# pour obtenir le numéro de série du disque dur?
- 12. Windows Mobile, comment obtenir ID et série?
- 13. Obtenir le numéro de série du disque dur (et pas le volume) sur Vista Ultimate 64 bits
- 14. Numéro de série Colonne dans ListView
- 15. Une méthode plus rapide pour obtenir le numéro de série du volume?
- 16. Récupération du numéro de série d'un clavier USB sous Windows
- 17. Comment obtenir le numéro de ligne en utilisant le scanner
- 18. Comment obtenir le numéro de série à partir du symbole MC 3000 ou de tout périphérique Symbol
- 19. Palm WebOS - Comment obtenir le numéro de téléphone de l'utilisateur?
- 20. Comment obtenir le dernier numéro de révision de SharpSVN?
- 21. Comment obtenir le numéro de page par entité avec NHibernate?
- 22. Recherche du numéro de série du lecteur USB sans WMI
- 23. Générer automatiquement un numéro de série dans gridview
- 24. Get H/D Numéro de série (Not Volumn Serial Number) pour IDE et SATA
- 25. Comment obtenir le dernier numéro de la fonction range()?
- 26. Comment obtenir le numéro de port Websphere 6.1
- 27. Comment obtenir le numéro de l'année avec PHP?
- 28. Comment obtenir le numéro d'index dans $ .click() de jQuery?
- 29. Générer des numéros de série
- 30. Affectation d'un numéro de série à un client à partir d'un groupe de numéros de série
Avec API Win, NO. Vous devez utiliser une bibliothèque dédiée de bas niveau (ASM). – Ampere