Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 02:47   #1
vanesko
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 10
По умолчанию SetupAPI

Здравствуйте!
У меня такая проблема:
Необходимо получить зависимости шины драйвера USB-устройства. Перерыл все, не могу найти как это сделать. В моей программе используется SetupAPI для получения кода экземпляра устройства. Как получить параметр, который в диспетчере устройств значится как "Зависимости шины"?
vanesko вне форума Ответить с цитированием
Старый 12.01.2012, 10:09   #2
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

SetupDiGetDeviceRegistryProperty с параметрами SPDRP_LEGACYBUSTYPE, SPDRP_LOWERFILTERS, SPDRP_UPPERFILTERS. Пробовал?
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 12.01.2012, 13:27   #3
vanesko
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 10
По умолчанию

Пробовал. SPDRP_LOWERFILTERS - нижние фильтры класса, SPDRP_UPPERFILTERS - верхние фильтры класса. SPDRP_LEGACYBUSTYPE - The function retrieves the device's legacy bus type as an INTERFACE_TYPE value. Возвращает 5. По идее там должно быть значение в формате REG_MULTI_SZ. Все свойства перепробовал, которые есть в MSDN в функции SetupDiGetDeviceRegistryProperty, ни один не совпал... Если в свойства составного USB устройства зайти, потом в сведения, там можно помимо "Зависимости шины" еще увидеть "Зависимости удаления" и "Зависимости извлечения". Может эти параметры как-то связаны? Но значения присутствуют только в "зависимости шины", мне они и нужны, хотя бы одно из них.
vanesko вне форума Ответить с цитированием
Старый 12.01.2012, 15:50   #4
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

я сам занимался этим вопрос примерно месяц, но бросил...
во-первых надо исходить из того что там написано не вполне корректное название "Зависимости шины", там выводится список устройств, которые зависят от данного, таким образом будет более корректно его назвать "Зависимые устройства". возможно это как-то поможет в получении этого параметра
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 12.01.2012, 16:37   #5
vanesko
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 10
По умолчанию

А вот интересно, возможно ли замониторить какие функции SetupAPI вызывает диспетчер устройств? Щас еще поставлю английскую версию винды, посмотрю как там называется этот параметр. Искал в реестре значения параметра "зависимости шины", нашел в разделе HKEY_LOCAL_MACHINE\SYSTEM\ControlSe t001\Services\hwdatacard\Enum параметры 0,1,2, которые соответствуют зависимостям шины Составного USB-устройства. Но когда подключил еще одно такое же устройство, там появились параметры 3, 4, 5, соответствующие следующему USB-устройства. Может быть для каждого устройства какая-то функция выдает эти номера? Возможно ли в драйвере, зависимом от USB-устройства узнать код экземляра устройства (InstanceId) USB-устройства? Тогда вопрос поиска параметра "зависимости шины" отпал. В windows 7 в свойствах драйвера есть параметр "Родитель", в котором записан код экземпляра USB-устройства, "породившего" его. Но в windows XP такого параметра нет! Также в windows 7 есть параметр "код контейнера чего-то там...", который совпадает с соответствующим USB-устройством и есть спец. функция, которая его берет, но опять же в XP такого нет... Короче вопроса три:
1. А вот интересно, возможно ли замониторить какие функции SetupAPI вызывает диспетчер устройств?
2. Когда подключил еще одно такое же устройство, там появились параметры 3, 4, 5, соответствующие следующему USB-устройству. Может быть для каждого устройства какая-то функция выдает эти номера?
3. Возможно ли в драйвере, который появился вследствии подключения USB-устройства узнать код экземляра устройства (InstanceId) составного USB-устройства?
vanesko вне форума Ответить с цитированием
Старый 12.01.2012, 16:51   #6
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

могу ответить только на этот вопрос
Цитата:
Сообщение от vanesko Посмотреть сообщение
1. А вот интересно, возможно ли замониторить какие функции SetupAPI вызывает диспетчер устройств?
возможно, только перехватчик придётся самому реализовывать
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 13.01.2012, 06:20   #7
vanesko
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 10
По умолчанию

Поставил английскую винду. Там этот параметр называется "bus relations". Поискал по MSDN, вроде нашел то что нужно. Щас проверю, выложу результат, может кому пригодится.

ЗЫ: вычитал с MSDN, что начиная с windows vista можно запросить ряд дополнительных параметров, используя property keys. Там есть параметр child и parent, который как раз соответствует потомкам и родителю драйвера устройства.
vanesko вне форума Ответить с цитированием
Старый 14.01.2012, 17:20   #8
vanesko
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 10
По умолчанию

Для того, чтобы получить InstanceID родителя драйвера делаем следующее:

Код:
CM_Get_Parent(ParentUSB, DeviceInfoData.DevInst, 0);
CM_Get_Device_ID_Size(requiredlength, ParentUSB, 0);
CM_Get_Device_IDA(ParentUSB, pszParent, requiredlength+1,0);
Для того, чтобы получить потомков используем функцию CM_Get_Child, затем CM_Get_Sibling чтобы получить всех потомков и CM_Get_Device_ID, чтобы получить InstanceID.

Подробнее тут: Retrieving Device Relations
vanesko вне форума Ответить с цитированием
Старый 14.01.2012, 18:22   #9
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

vanesko, понятно. получается этот параметр вычисляется на лету а не извлекается из функции SetupDiGetDeviceRegistryProperty
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 15.01.2012, 05:34   #10
vanesko
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Rock-n-Rolla Посмотреть сообщение
vanesko, понятно. получается этот параметр вычисляется на лету а не извлекается из функции SetupDiGetDeviceRegistryProperty
Да. Причем как можно заметить в версиях windows vista и выше на вкладке сведения параметров намного больше, так как там возможно извлечь дополнительные параметры, используя Unified Device Property Model. Подробнее здесь.
vanesko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц