次の方法で共有


EVT_WDF_INTERRUPT_ISR コールバック関数 (wdfinterrupt.h)

[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 コールバック関数では、ドライバーによって完全に処理された割り込みデータと処理されていない割り込みデータを決定する必要がある場合があります。

KMDF のバージョン 1.11 以降では、ドライバーは パッシブ レベルの割り込み処理を提供できます。 ドライバーが割り込みオブジェクトに対してパッシブ レベルの処理を要求した場合、IRQL = PASSIVE_LEVELでその割り込みの EvtInterruptIsr コールバック関数を呼び出す前に、フレームワークは、ドライバーが割り込みオブジェクトの WDF_INTERRUPT_CONFIG 構造で構成したパッシブ レベルの割り込みロックを取得します。 DIRQL での割り込み処理と同様に、ドライバーの EvtInterruptIsr 関数は、後で処理するために割り込みに関する情報を保存する必要があります。

パッシブ レベルの割り込み処理をサポートするドライバーは、 EvtInterruptWorkItem または EvtInterruptDpc コールバック関数を提供して、保存された情報を処理できます。

フレームワーク ベースのドライバーでの割り込みの処理の詳細については、「 ハードウェア割り込みの処理」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfinterrupt.h (Wdf.h を含む)
IRQL 「解説」を参照してください。

こちらもご覧ください

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt