2015-06-25 4 views
1

Я разрабатываю драйвер фильтра WDM, который подключается к устройствам USB Mass Storage. Мне нужно иметь возможность перемещаться по цепочке родительских и дедушкиных устройств (т. Е. Хабов) и проверять идентификаторы поставщиков и продуктов.Определение цепи родительских устройств, подключенных к запоминающему устройству USB

Использование IoGetDeviceAttachmentBaseRef(), я могу получить доступ к PDO устройства массовой памяти, но я попал в нижнюю часть накопителя USB Mass Storage. Так что теперь мне нужно получить доступ к основному стеку концентратора USB, но я не уверен, как это можно сделать.

Если вы пройдете через список NextDevice в PDO устройства массовой памяти, вы можете увидеть PDO концентратора, но это не говорит мне, что концентратор является родителем/дедушкой и бабушкой массы накопитель.

ответ

0

Вы должны иметь возможность легко подключаться как фильтр ко всем USB-устройствам, поскольку все они относятся к одному классу настройки устройства (USB). Затем следите за IRP_MJ_PNP:IRP_MN_QUERY_DEVICE_RELATIONS с RelationType, установленным на BusRelations, для получения информации о взаимоотношениях между родителями и дочерними элементами между устройствами.

Если цикл по списку NextDevice в PDO устройства массовой памяти, вы можете увидеть PDO ступицы в списке, но делать это таким образом, не сказать мне ступицу является родителем/прародителем устройство массовой памяти.

Безопаснее использовать IoEnumerateDeviceObjectList, чтобы пройти список NextDevice.