digitalmars.D - Any one knows how can I obtain the GUID of a USB?
- dany (56/56) Apr 03 import std.stdio;
import std.stdio; import core.sys.windows.windows; extern (Windows) { HANDLE SetupDiGetClassDevsW(LPCWSTR, LPCWSTR, HANDLE, DWORD); BOOL SetupDiEnumDeviceInfo(HANDLE, DWORD, SP_DEVINFO_DATA*); BOOL SetupDiGetDeviceRegistryPropertyW(HANDLE, SP_DEVINFO_DATA*, DWORD, PDWORD, PBYTE, DWORD, PDWORD); BOOL SetupDiDestroyDeviceInfoList(HANDLE); struct SP_DEVINFO_DATA { DWORD cbSize; DWORD_PTR DevInst; HANDLE hDevInfo; void* Reserved; } const DWORD DIGCF_PRESENT = 0x00000002; const DWORD DIGCF_DEVICEINTERFACE = 0x00000010; const DWORD SPDRP_DEVICEGUID = 0x00000010; } void main() { // Obtener una lista de dispositivos USB auto deviceInfoSet = SetupDiGetClassDevsW(null, "USB", null, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if (deviceInfoSet == INVALID_HANDLE_VALUE) { writeln("Error al obtener la lista de dispositivos USB."); return; } // Estructura de datos para almacenar la información del dispositivo SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = SP_DEVINFO_DATA.sizeof; // Iterar sobre los dispositivos USB y obtener el GUID for (DWORD index = 0; SetupDiEnumDeviceInfo(deviceInfoSet, index, &deviceInfoData); ++index) { // Obtener el GUID del dispositivo wchar[] guidBuffer = new wchar[256]; // Espacio suficiente para almacenar el GUID DWORD dataSize; if (SetupDiGetDeviceRegistryPropertyW(deviceInfoSet, &deviceInfoData, SPDRP_DEVICEGUID, null, cast(LPBYTE)guidBuffer.ptr, guidBuffer.length * 2, &dataSize)) { // Convertir el tamaño de los datos a uint uint dataSizeUint = cast(uint) dataSize; writeln("GUID del dispositivo USB: ", guidBuffer[0..(dataSizeUint / 2)]); // Dividir por 2 porque dataSize está en bytes y guidBuffer es un array de wchar } } // Liberar la lista de dispositivos SetupDiDestroyDeviceInfoList(deviceInfoSet); }
Apr 03