Как я понимаю, итерацию стека устройств WDM можно выполнять только снизу вверх, поскольку DEVICE_OBJECT имеет член AttachedDevice (но не член LowerDevice).К счастью, обратный вызов AddDevice получает PhysicalDeviceObject, поэтому вы можете выполнять итерацию по всему стеку.
Из моего драйвера фильтра я пытаюсь определить, фильтрую ли я уже определенный объект устройства.(Допустим, у меня есть законная причина для этого. Имейте в виду.) Моя идея состояла в том, чтобы просмотреть каждый DEVICE_OBJECT в стеке и сравнить его член DriverObject с моим.
Судя по существованию IoGetAttachedDeviceReference, я предполагаюпросто получить доступ к AttachedDevice не безопасно, поскольку существует риск внезапного исчезновения устройства.Однако IoGetAttachedDeviceReference выводит меня прямо на вершину стека, что мне не подходит.
Итак, есть ли безопасный способ перебора стека устройств?