次の方法で共有


WdfDpcCreate 関数 (wdfdpc.h)

[KMDF にのみ適用]

WdfDpcCreate メソッドは、フレームワーク DPC オブジェクトを作成し、EvtDpcFunc コールバック関数を登録します。

構文

NTSTATUS WdfDpcCreate(
  [in]  PWDF_DPC_CONFIG        Config,
  [in]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [out] WDFDPC                 *Dpc
);

パラメーター

[in] Config

呼び出し元によって割り当てられた WDF_DPC_CONFIG 構造体へのポインター。

[in] Attributes

新しい DPC オブジェクトの属性を指定する呼び出し元によって割り当てられた WDF_OBJECT_ATTRIBUTES 構造体へのポインター。

[out] Dpc

新しいフレームワーク DPC オブジェクトへのハンドルを受け取る場所へのポインター。

戻り値

WdfDpcCreate は、操作が成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、メソッドは次のいずれかの値を返す可能性があります。

リターン コード 説明
STATUS_INVALID_PARAMETER
無効なパラメーターが指定されました。
STATUS_INSUFFICIENT_RESOURCES
DPC オブジェクトを割り当てませんでした。
STATUS_WDF_PARENT_NOT_SPECIFIED
親オブジェクトが WDF_OBJECT_ATTRIBUTES 構造体で指定されていません。
STATUS_INVALID_DEVICE_REQUEST
WDF_OBJECT_ATTRIBUTES 構造体の ParentObject メンバーは、フレームワーク デバイス オブジェクトまたは親のチェーンがフレームワーク デバイス オブジェクトにつながるオブジェクトを参照しません。
STATUS_WDF_INCOMPATIBLE_EXECUTION_LEVEL
WDF_DPC_CONFIG 構造体の AutomaticSerialization メンバーは TRUEに設定されますが、親オブジェクトの 実行レベル は WdfExecutionLevelPassive に設定されます。
 

WdfDpcCreate メソッドが返す可能性があるその他の戻り値の一覧については、「Framework オブジェクト作成エラー」を参照してください。

このメソッドは、他のNTSTATUS 値を返す場合もあります。

注釈

ドライバーは通常、EvtDriverDeviceAdd コールバック関数内から WdfDpcCreate 呼び出します。

ドライバーは、DPC オブジェクトを作成するときに、ParentObjectWDF_OBJECT_ATTRIBUTES 構造体のメンバーに親オブジェクトを指定する必要があります。 親オブジェクトには、フレームワーク デバイス オブジェクト、または親のチェーンがフレームワーク デバイス オブジェクトにつながる任意のオブジェクトを指定できます。 フレームワークは、デバイス オブジェクトを削除するときに DPC オブジェクトを削除します。

WdfDpcCreate 呼び出すと、フレームワーク DPC オブジェクトが作成され、EvtDpcFunc コールバック関数が登録されます。 コールバック関数の実行をスケジュールするには、ドライバー WdfDpcEnqueueを呼び出す必要があります。

ドライバーが EvtCleanupCallback 提供するか、フレームワーク タイマー オブジェクトのコールバック関数 EvtDestroyCallback を する場合、フレームワークは IRQL = PASSIVE_LEVEL でこれらのコールバック関数を呼び出します。

DPC オブジェクトの使用の詳細については、「割り込み のサービスを参照してください。

例示

次のコード例では、WDF_DPC_CONFIG_INIT 構造体を初期化し、DPC オブジェクトを作成します。

WDF_DPC_CONFIG dpcConfig;
WDF_OBJECT_ATTRIBUTES dpcAttributes;
NTSTATUS status;

WDF_DPC_CONFIG_INIT(
                    &dpcConfig,
                    MyEvtDpcFunc
                    );
dpcConfig.AutomaticSerialization = TRUE;
WDF_OBJECT_ATTRIBUTES_INIT(&dpcAttributes);
dpcAttributes.ParentObject = pDevExt->WdfDevice;
status = WdfDpcCreate(
                      &dpcConfig,
                      &dpcAttributes,
                      &pDevExt->CompleteWriteDpc
                      );
if (!NT_SUCCESS(status)) {
    return status;
}

必要条件

要件 価値
ターゲット プラットフォーム 普遍
最小 KMDF バージョン 1.0
ヘッダー wdfdpc.h (Wdf.h を含む)
図書館 Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

こちらもご覧ください

EvtDpcFunc

EvtDriverDeviceAdd

WDF_DPC_CONFIG

WDF_DPC_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WdfDpcEnqueue