有关编写 PnP 通知回调例程的指导原则

PnP 管理器在 IRQL = PASSIVE_LEVEL 调用通知回调例程。

为了确保 PnP 子系统顺利运行,PnP 通知回调例程必须遵循以下准则:

  1. 通知回调例程不得阻止。

  2. 通知回调例程不得调用或引发对生成 PnP 事件的同步例程或阻止等待设备安装或删除的任何例程的调用。

    在通知回调期间调用此类例程可能会导致系统死锁。

    例如,驱动程序不得在通知回调例程中调用 IoReportTargetDeviceChange 。 请 改为调用 IoReportTargetDeviceChangeAsynchronous

  3. 对于未显式失败的任何事件,通知回调例程应返回成功。

    当驱动程序注册事件类别的通知时,PnP 管理器会通知驱动程序该类别中的所有事件(现在和将来)。 如果驱动程序针对它未处理的事件返回错误状态,则驱动程序会错误地承担新查询事件失败的风险。

    例如,当驱动程序无法发送查询通知来阻止建议的事件时,驱动程序会正确返回错误状态。

  4. 通知回调例程应为分页代码。