次の方法で共有


PnP 通知コールバック ルーチンの記述に関するガイドライン

PnP マネージャーは、IRQL = PASSIVE_LEVEL で通知コールバック ルーチンを呼び出します。

PnP サブシステムの円滑な操作を確保するため、PnP 通知コールバック ルーチンは、以下のガイドラインに従う必要があります。

  1. 通知コールバック ルーチンがブロックしてはなりません。

  2. 通知コールバック ルーチンは、PnP イベントを生成する同期ルーチン、またはデバイスの取り付けや取り出しの待機をブロックするルーチンを呼び出したり、呼び出しを発生させたりしてはなりません。

    通知コールバック中にこのようなルーチンを呼び出すと、システムのデッドロックが発生する可能性があります。

    たとえば、ドライバーは、通知コールバック ルーチンで IoReportTargetDeviceChange を呼び出す必要があります。 代わりに IoReportTargetDeviceChangeAsynchronous を呼び出します。

  3. 通知コールバック ルーチンは、明示的に失敗しないイベントの成功を返す必要があります。

    ドライバーがイベント カテゴリの通知に登録すると、PnP マネージャーは、そのカテゴリ内のすべてのイベント (現在と将来) をドライバーに通知します。 ドライバーが処理しないイベントのエラー ステータスを返した場合、ドライバーは新しいクエリ イベントに誤って失敗するリスクがあります。

    ドライバーは、たとえば、提案されているイベントを拒否するクエリ通知に失敗した場合、エラー ステータスを正しく返します。

  4. 通知コールバック ルーチンは、ページング コードにする必要があります。