Рекомендации по проектированию начальных устройств

  • Диспетчер PnP не может создавать запросы на устройство, пока не завершится обработка IRP_MN_START_DEVICE IRP, указывая на то, что все драйверы устройства выполнили свои начальные операции.

  • Поскольку подпрограммаdispatchPnPвыполняется в контексте системного потока в IRQL PASSIVE_LEVEL, любая память, выделенная ExAllocatePoolWithTag для использования исключительно во время инициализации, может быть из пула страниц, если драйвер не управляет устройством, в котором хранится системный файл страницы. Такое выделение памяти должно быть выпущено с помощью ExFreePool, прежде чем подпрограмма dispatchPnP DispatchPnP возвращает элемент управления.

  • ISR драйвера устройства WDM должен быть способен определить, был ли он вызван с ложным прерыванием даже при запуске устройства. При возвращении из вызова IoConnectInterrupt в кодовом пути, обрабатывающем IRP_MN_START_DEVICE, ISR можно вызвать немедленно, если прерывания на устройстве включены.