Добрый день.
Пытаюсь получить 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);