Совершенно верно. IoRegisterDeviceInterface требует PDO, коего у legacy драйвера нет по определению.
PDO получается двумя способами:
а) возврат указателя на устройство в ответе на MN_QUERY_RELATIONS/BusRelations
б) IoReportDetectedDevice (для software-only устройств — в параметры передать все нули). Такой вызов создаст временный PDO "на лету".
Путь а) требует bus driverа, который бы такое сделал. Практически все bus drivers в системе — строят этот ответ на основне инфы, снятой с железа. Единственное (почти что) исключение — это root enumerator, который перечисляет ноды в реестре. Ноду можно создать вызовом SetupDiCreateDeviceInstance (кажется, он так назывался), или же установив INF.
Еще раз — делать такое для software-only модуля вряд ли оправдано. Одна лишь необходимость INF файла — та еще радость. Неоправданное усложнение задачи, оно же "овердизайн".
S>Маленькая поправка: Ваш девайс вообще не имеет девноды, поэтому даже до проверки >флагов не дойдет, раньше рюхнется. Кстати, и PDO и девнода для legacy драйвера
А можно доказательство этого утверждения — с помощью WinDbg, WinObj или тому подобных тулов?
Легаси драйвер вообще не имеет отношения ни к PnP, ни к power management.