Определение цепочки родительских устройств, подключенных к USB-накопителю

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам