¿Hay una forma fácil de obtener el número de serie de todos los discos duros en una PC usando la API de Win32?¿Cómo obtener el número de serie de los discos duros?
Respuesta
GetVolumeInformation es tu amigo.
GetVolumeInformation() solo le dará el número de serie del volumen. ¡Volumen del disco! = Disco duro. La serie del volumen generalmente es solo una marca de tiempo de 32 bits desde que se formateó el disco. –
Tiene razón. –
¡La identificación del volumen es un 101% poco confiable porque se puede cambiar tan fácilmente! – Ampere
GetVolumeInformation
le dará información sólo acerca de la partición o volumen, no se trata de disco duro entero.
Debe utilizar la función DeviceIoControl
para obtener información.
Aquí posible código:
#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 tiene instalados más de 1 unidades de disco duro, u debe cambiar "\\\\.\\PhysicalDrive0"
a "\\\\.\\PhysicalDrive1"
etc.
Esta puede ser la respuesta a una pregunta. Será mejor si pones un ejemplo (para lectores futuros, en caso de que el enlace se rompa) –
@PriyeshKumar Gracias por el consejo, soy nuevo en stackoverflow. – johnbrovi
- 1. ¿Cómo obtener el número de serie de los discos duros de Mac?
- 2. creando discos duros virtuales
- 3. Listar todos los discos duros en un sistema Linux
- 4. Número de discos de artistas
- 5. Atmel UC3: cómo obtener el número de serie?
- 6. Obtener número de serie del disco duro
- 7. WMI HDD Número de serie transpuesto
- 8. ¿Cómo llamar a una lista de los discos duros conectados físicamente usando Free Pascal o, en su defecto, Delphi?
- 9. No se pueden compilar discos duros ffmpeg compatibles con i386 en Mac OS X
- 10. Recuperando el número de serie del dispositivo
- 11. ¿Cómo obtener el número de serie de la cámara de EXIF?
- 12. ¿Cómo obtiene programáticamente el número de serie de un iPhone?
- 13. Número de serie X509 usando java
- 14. ¿Cómo obtener la identificación de la placa base o el número de serie en Delphi?
- 15. ¿Cómo se genera el número de serie en una consulta?
- 16. Cómo obtener el número de serie del dispositivo USB en C#
- 17. ¿Cómo uso C# para obtener el número de serie del disco duro?
- 18. C++ Encontrar el mayor número en serie
- 19. Open Sin editar discos y obtener el tamaño OS X
- 20. ¿Cómo debo protegerme contra los ataques de enlaces duros?
- 21. ¿Cómo registrar un número de serie en un archivo ejecutable?
- 22. Delphi RAD Studio Número de serie
- 23. Generar automáticamente el número de serie en gridview
- 24. Discos de Python en sqlalchemy
- 25. Obtenga el número de serie de HDD (y NO de volumen) en Vista Ultimate 64 bit
- 26. Cómo obtener el número de SKU
- 27. ¿Cómo obtener el número de línea actual?
- 28. Imprimir el número de serie de mi Mac en java con los comandos de Unix
- 29. Postgres distribuyendo datos a través de múltiples discos
- 30. Obtener el número de serie de la unidad de disco duro Proporcionado por el fabricante a través de PHP
Con Win API, NO. Necesita usar una biblioteca dedicada de bajo nivel (ASM). – Ampere