Название: WinAPI. SetupDiGetDeviceRegistryProperty получить SPDRP_LOCATION_INFORMATION
Отправлено: slan от Июнь 29, 2012, 14:41
Добрый день. Пытаюсь получить SPDRP_LOCATION_INFORMATION подключенных HID-устройств, но первый же вызов SetupDiGetDeviceRegistryPropertyA с данным параметром приводит к ошибке ERROR_INVALID_DATA. Может что не так делаю? p.s. ошибка именно с SPDRP_LOCATION_INFORMATION, если например поставить SPDRP_DEVICEDESC, то всё отрабатывается нормально _err.clear();
HDEVINFO hDev;
GUID hidGuid; HidD_GetHidGuid(&hidGuid);
hDev = SetupDiGetClassDevs(&hidGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if(!hDev) { _err = "Не удалось получить описание устройств класса HID"; return false; }
bool res = true; int i = 0;
while(res) { unsigned long dataType, bufferSize, reqSize; unsigned char *buffer;
SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
res = SetupDiEnumDeviceInfo(hDev, i++, &deviceInfoData);
if(res) { if(!SetupDiGetDeviceRegistryPropertyA(hDev, &deviceInfoData, SPDRP_LOCATION_INFORMATION, &dataType, 0, 0, &reqSize)) { int error = GetLastError(); if(error != ERROR_INSUFFICIENT_BUFFER) { if(error == ERROR_INVALID_DATA) _err = "Свойство недоступно"; else _err = "Ошибка SetupDiGetDeviceRegistryProperty"; return false; } }
bufferSize = reqSize; buffer = new unsigned char[bufferSize];
if(!SetupDiGetDeviceRegistryPropertyA(hDev, &deviceInfoData, SPDRP_LOCATION_INFORMATION, &dataType, buffer, bufferSize, &reqSize)) { int error = GetLastError(); if(error == ERROR_INVALID_DATA) _err = "Свойство недоступно"; else _err = "Ошибка SetupDiGetDeviceRegistryProperty"; }
HidDevice device; device._path.assign((const char*)buffer);
_devList.push_back(device);
delete [] buffer; }
}
SetupDiDestroyDeviceInfoList(hDev);
|