Определение цепочки родительских устройств, подключенных к 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.