Рекомендации по проектированию для запуска устройств
Диспетчеру PnP не удается создать запросы для устройства, пока не завершится IRP_MN_START_DEVICE IRP, что указывает на то, что все драйверы устройства выполнили свои операции запуска.
Так как подпрограмма DispatchPnP выполняется в контексте системного потока на PASSIVE_LEVEL IRQL, любая память, выделенная с помощью ExAllocatePoolWithTag для использования исключительно во время инициализации, может находиться в выгружаемом пуле, если драйвер не управляет устройством, на котором хранится файл системной подкачки. Такое выделение памяти должно быть освобождено с помощью ExFreePool , прежде чем подпрограмма DispatchPnP вернет управление.
ISR драйвера устройства WDM должен быть в состоянии определить, был ли он вызван с фиктивным прерыванием даже во время запуска устройства. При возвращении из вызова IoConnectInterrupt в пути кода, который обрабатывает IRP_MN_START_DEVICE, isR можно вызвать немедленно, если на устройстве включены прерывания.