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

指向调用方分配 的WDF_OBJECT_ATTRIBUTES 结构的指针,该结构指定新 DPC 对象的属性。

[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 方法可能返回的其他返回值的列表,请参阅 框架对象创建错误

此方法还可能返回其他 NTSTATUS 值

注解

驱动程序通常从其 EvtDriverDeviceAdd 回调函数中调用 WdfDpcCreate

驱动程序创建 DPC 对象时,必须在 WDF_OBJECT_ATTRIBUTES 结构的 ParentObject 成员中指定父对象。 父对象可以是框架设备对象,也可以是其父级链导致框架设备对象的任何对象。 框架在删除设备对象时会删除 DPC 对象。

调用 WdfDpcCreate 会创建框架 DPC 对象并注册 EvtDpcFunc 回调函数。 若要计划回调函数的执行,驱动程序必须调用 WdfDpcEnqueue

如果驱动程序为框架计时器对象提供 EvtCleanupCallbackEvtDestroyCallback 回调函数,请注意框架在 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)
Library 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