[KMDF と UMDF に適用]
ドライバーの EvtInterruptIsr イベント コールバック関数は、ハードウェア割り込みを処理します。
構文
EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;
BOOLEAN EvtWdfInterruptIsr(
[in] WDFINTERRUPT Interrupt,
[in] ULONG MessageID
)
{...}
パラメーター
[in] Interrupt
フレームワーク割り込みオブジェクトへのハンドル。
[in] MessageID
デバイスがメッセージ信号割り込み (MSI) を使用している場合、このパラメーターはデバイスのハードウェア割り込みメッセージを識別するメッセージ番号です。 それ以外の場合、この値は 0 です。
戻り値
EvtInterruptIsr コールバック関数は、関数がハードウェア割り込みを処理する場合 TRUE を返す必要があります。 それ以外の場合、この関数は FALSE 返す必要があります。
注釈
EvtInterruptIsr コールバック関数を登録するには、ドライバーは、WdfInterruptCreateを呼び出す前に、コールバック関数のアドレスを WDF_INTERRUPT_CONFIG 構造体に配置する必要があります。
EvtInterruptIsr コールバック関数は、フレームワーク ベースのドライバーの割り込みサービス ルーチン (ISR) です。これは、ハードウェア割り込みが発生したときに呼び出されます。
割り込みが、この EvtInterruptIsr コールバック関数サービスのハードウェアからでない場合、ドライバーは FALSE 返す必要があります。 割り込みベクトルが共有されている場合、システムは別の割り込みサービス ルーチンを呼び出します。
ドライバーが割り込みオブジェクトのパッシブ レベルの処理を要求していない場合、EvtInterruptIsr コールバック関数を呼び出す前に、フレームワークはプロセッサの IRQL をデバイスの IRQL (DIRQL) に発生させ、割り込みオブジェクトの WDF_INTERRUPT_CONFIG 構造体で指定されたドライバーのスピン ロックを取得します。
EvtInterruptIsr コールバック関数は比較的高い IRQL で実行されるため、非常に少数のフレームワーク オブジェクト メソッドまたはシステム ルーチンを呼び出すことができます。 さらに、このコールバック関数は、ページング可能な コード アクセスできません。
通常、EvtInterruptIsr コールバック関数は、ハードウェア割り込みをクリアし、コールバック関数が戻り、システムが IRQL を下げた後に失われる可能性のある情報を保存します (IRQL を下げると追加の割り込みが発生するため)。 フレームワーク ベースのドライバーは、割り込みオブジェクトの コンテキスト空間内の割り込みに関する情報保存します。
ドライバーは通常、低い IRQL で保存された情報を処理する EvtInterruptDpc コールバック関数を提供します。 (いくつかのドライバーは、EvtInterruptDpc コールバック関数ではなく、1 つ以上の EvtDpcFunc コールバック関数を提供します)。実行のための EvtInterruptDpc コールバック関数のスケジュール設定については、「割り込み のサービスを参照してください。
EvtInterruptIsr コールバック関数は、EvtInterruptDpc コールバック関数が実行される前に、いくつかの割り込みを処理できる必要があります。 そのため、ドライバーは複数の割り込みからの割り込みデータを格納する必要があります。また、EvtInterruptIsr とEvtInterruptDpc コールバック関数は、ドライバーによって完全に処理された割り込みデータとそうでない割り込みデータを判断する必要がある場合があります。
バージョン 1.11 の KMDF 以降では、ドライバーはパッシブ レベルの割り込み処理 を提供できます。 ドライバーが割り込みオブジェクトに対してパッシブ レベルの処理を要求した場合、IRQL = PASSIVE_LEVEL で割り込みの EvtInterruptIsr コールバック関数を呼び出す前に、フレームワークは、割り込みオブジェクトの WDF_INTERRUPT_CONFIG 構造体でドライバーが構成したパッシブ レベルの割り込みロックを取得します。 DIRQL での割り込み処理と同様に、ドライバーの EvtInterruptIsr 関数は、後で処理するために割り込みに関する情報を保存する必要があります。
パッシブ レベルの割り込み処理をサポートするドライバーは、EvtInterruptWorkItem または EvtInterruptDpc コールバック関数を提供して保存された情報を処理できます。
フレームワーク ベースのドライバーでの割り込みの処理の詳細については、「ハードウェア割り込みの処理」を参照してください。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 普遍 |
最小 KMDF バージョン | 1.0 |
UMDF の最小バージョン を する | 2.0 |
ヘッダー | wdfinterrupt.h (Wdf.h を含む) |
IRQL | (「解説」セクションを参照してください。 |
こちらもご覧ください
EvtDpcFunc の