Windows 8 以降では、カーネル モード ドライバー フレームワーク (KMDF) ドライバーとユーザー モード ドライバー フレームワーク (UMDF) ドライバーをオプションとして、パッシブ レベルで実行する割り込みサービス ルーチン (ISR) を登録できます。
KMDF ドライバーと UMDF ドライバーのパッシブ レベル ISR の詳細については、次のトピックを参照してください。
周辺機器が汎用 I/O (GPIO) ピンを使用して割り込み要求をプロセッサに中継する場合、Windows 割り込みの抽象化により、このデバイスのドライバーは、このピンが属する GPIO コントローラーのハードウェア固有の詳細を無視できます。 デバイスからの GPIO リレー割り込み要求に応答してカーネル トラップ ハンドラーが実行されると、このハンドラーは、必要に応じて、GPIO ハードウェア レジスタの割り込みを自動的にクリアまたはマスクします。 さらに、カーネル トラップ ハンドラーは、デバイスの ISR を直接呼び出すか、別のスレッドで実行するようにこの ISR をスケジュールします。
多くの場合、GPIO ハードウェア レジスタはメモリ マップされます。その場合、カーネル トラップ ハンドラーは DIRQL で直接アクセスできます。 ただし、周辺機器のハードウェア レジスタはメモリ マップされていない可能性があります。その場合、周辺機器ドライバーは I/O 要求を使用してアクセスする必要があります。 その場合、I/O 要求を使用して割り込みを無音にしたり、割り込みの初期サービスを実行したりできるように、周辺機器ドライバーの ISR は IRQL = PASSIVE_LEVEL で実行する必要があります。 パッシブ レベルの ISR は I/O 要求を同期的に送信でき、必要に応じて要求が完了するまでブロックできます。
エッジ によってトリガーされる割り込み要求シグナルを生成する周辺機器のパッシブ レベルの ISR をサポートするために、カーネル トラップ ハンドラーは GPIO ピンで保留中の割り込みをクリアし、パッシブ レベルのカーネル スレッドで実行するように ISR をスケジュールします。
レベルによってトリガーされる割り込み要求シグナルを生成する周辺機器のパッシブ レベルの ISR をサポートするために、カーネル トラップ ハンドラーは、GPIO ピンで保留中の割り込みをマスクし、パッシブ レベルのカーネル スレッドで実行するように ISR をスケジュールします。 ISR は、周辺機器の割り込み要求をクリアする役割を担います。 ISR から制御が戻った後、カーネルスレッドは GPIO ピンで割り込みをアンマスクします。
割り込みは ISR が戻るまでマスクされたままであるため、デバイスのパッシブ レベルの ISR は割り込みの初期サービスのみを実行し、他のデバイスのパッシブ レベルの ISR が遅延しないように戻る必要があります。 通常、ドライバーは割り込みワーカー スレッドに割り込み関連の追加処理を延期する必要があります。これは ISR よりも低い優先順位で実行されます。