次の方法で共有


パッシブレベルの ISR

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 よりも低い優先順位で実行されます。