Russian Qt Forum
Октябрь 01, 2024, 02:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: WinAPI. SetupDiGetDeviceRegistryProperty получить SPDRP_LOCATION_INFORMATION  (Прочитано 4491 раз)
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);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 21.