次の方法で共有


EVT_WDF_DPC コールバック関数 (wdfdpc.h)

[KMDF にのみ適用]

ドライバーの EvtDpcFunc コールバック関数は、IRQL = DISPATCH_LEVELでドライバー定義の操作を実行します。

構文

EVT_WDF_DPC EvtWdfDpc;

void EvtWdfDpc(
  [in] WDFDPC Dpc
)
{...}

パラメーター

[in] Dpc

フレームワーク DPC オブジェクトへのハンドル。

戻り値

なし

注釈

EvtDpcFunc コールバック関数を登録するには、ドライバーは関数のアドレスを WDF_DPC_CONFIG 構造体に配置し、WdfDpcCreate 呼び出す必要があります。

ドライバーは通常、EvtDpcFunc コールバック関数で 完全な I/O 要求を します。

EvtDpcFunc コールバック関数はDISPATCH_LEVELで実行され、ページング可能な コード アクセスできません。 EvtDpcFunc コールバック関数が IRQL = PASSIVE_LEVEL で操作を実行する必要がある場合は、フレームワーク作業項目 使用

EvtDpcFunc コールバック関数 提供する代わりに、多くのドライバーは、そのデバイスがサポートする割り込みの種類ごとに 1 つの EvtInterruptDpc コールバック関数を提供します。 ドライバーがデバイスごとに 複数の フレームワーク キュー オブジェクトを作成する場合は、個別の DPC オブジェクトを使用し、キューごとに EvtDpcFunc コールバック関数を することを検討してください。

EvtDpcFunc コールバック関数の実行をスケジュールするには、ドライバーが WdfDpcEnqueue 呼び出す必要があります。 ドライバーは通常、EvtInterruptIsr コールバック関数から WdfDpcEnqueue 呼び出します。

ドライバーが WdfDpcEnqueue 呼び出すと、システムはシステムの DPC キューに DPC オブジェクトを追加します。 システムが優先度の高いタスクを実行していない場合は、キューからオブジェクトを削除し、オブジェクトの EvtDpcFunc コールバック関数を呼び出します。

オブジェクトが既にキューに登録されている場合、システムは DPC オブジェクトを DPC キューに追加しません。 EvtInterruptIsr コールバック関数は、システムが EvtDpcFunc コールバック関数を呼び出す前に複数回呼び出される場合があります。 したがって、EvtDpcFunc コールバック関数は、いくつかの割り込みからの情報を処理でき、最後に呼び出された後に発生したすべての割り込みを処理する必要があります。

通常、ドライバーの EvtDpcFunc コールバック関数の実行を他のコールバック関数の実行と同期する必要があります。 詳細については、「割り込みコード の同期」を参照してください。

DPC オブジェクトの親オブジェクトへのハンドルを取得するために、EvtDpcFunc コールバック関数は WdfDpcGetParentObject 呼び出すことができます。 DPC オブジェクトの基になる KDPC 構造体へのポインターを取得するために、EvtDpcFunc コールバック関数は、WdfDpcWdmGetDpc 呼び出すことができます。

EvtDpcFunc コールバック関数 使用する方法の詳細については、「割り込み のサービスをする」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 普遍
最小 KMDF バージョン 1.0
ヘッダー wdfdpc.h (Wdf.h を含む)
IRQL DISPATCH_LEVEL

こちらもご覧ください

EvtInterruptDpc

EvtInterruptIsr

WDF_DPC_CONFIG

WdfDpcCreate

WdfDpcEnqueue

WdfDpcGetParentObject

WdfDpcWdmGetDpc