Есть ли простой способ получить серийный номер всех жестких дисков на ПК с помощью Win32 API?Как получить серийный номер с жестких дисков?
ответ
GetVolumeInformation - ваш друг.
GetVolumeInformation() предоставит вам серийный номер тома. Объем диска! = Жесткий диск. Серийный том, как правило, представляет собой только 32-разрядную метку времени, когда был отформатирован диск. – 2008-12-01 15:46:54
Вы правы. – 2008-12-01 19:37:51
GetVolumeInformation
даст вам информацию только о раздела или объема, а не о целом HDD.
Чтобы получить информацию, вы должны использовать функцию DeviceIoControl
.
Здесь можно код:
#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;
}
Если установлено более 1 жестких дисков, и должны изменить "\\\\.\\PhysicalDrive0"
к "\\\\.\\PhysicalDrive1"
и т.д.
- 1. Как получить серийный номер с жестких дисков Mac?
- 2. Получите серийный номер всех жестких дисков и разделов в нем
- 3. Получить серийные номера жестких дисков с помощью Powershell
- 4. Переключение жестких дисков ПК
- 5. Список жестких дисков и дисков на них
- 6. получить серийный номер X509Certificate
- 7. физический серийный номер в raid (windows)
- 8. Несоответствие использования жестких дисков Windows
- 9. Как получить серийный номер машины
- 10. Чтение параллельно с нескольких жестких дисков
- 11. серверы с разными размерами жестких дисков
- 12. Как я анализирую идентификаторы жестких дисков
- 13. Как определить наличие нескольких жестких дисков?
- 14. Получить серийный номер H/D (не серийный номер Volumn) для IDE и SATA
- 15. USB Stick серийный номер в Python
- 16. Получить серийный номер OSX HD
- 17. Получить серийный номер жесткого диска
- 18. Не получается получить серийный номер
- 19. Получить HD/Partition серийный номер
- 20. Получить серийный номер USB C++
- 21. команда linux для поиска общего числа дисков и жестких дисков
- 22. Получить серийный номер устройства Android
- 23. Серийный номер жесткого диска WMI
- 24. Как создать серийный номер
- 25. Оптимизация жестких дисков в кластере Cassandra/Solr
- 26. Как получить серийный номер жесткого диска scsi?
- 27. Как получить серийный номер для жесткого диска
- 28. Как получить серийный номер iPad в ios8
- 29. Как получить первый серийный номер материнской платы?
- 30. Как получить серийный номер тома системного диска
С Win API, NO. Вам необходимо использовать специальную низкоуровневую (ASM) библиотеку. – Ampere 2015-04-07 22:07:35