Нужно динамически цеплять традиционный (не-PnP) драйвер-фильтр к различным устройствам. Для получения DEVICE_OBJECT по имени интерфейса везде предписывается использовать IoGetDeviceObjectPointer. Оно работает через ZwOpenFile/IoGetRelatedDeviceObject, а при открывании устройства ему посылается IRP_MJ_CREATE. Если драйвер устройства отвергает запрос (или вообще не обрабатывает IRP_MJ_CREATE) — объект получить не удается. В моем случае один из драйверов возвращает STATUS_INVALID_DEVICE_REQUEST.
IoAttachDevice не спасает — оно тоже работает через ZwOpenFile.
Есть какой-нибудь относительно честный способ получить DEVICE_OBJECT по имени интерфейса сразу из каталога объектов? Или только самому в том каталоге копаться?