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。 否则,方法可能会返回以下值之一:
返回代码 | 说明 |
---|---|
|
指定的参数无效。 |
|
无法分配 DPC 对象。 |
|
未在 WDF_OBJECT_ATTRIBUTES 结构中指定父对象。 |
|
WDF_OBJECT_ATTRIBUTES 结构的 ParentObject 成员不引用框架设备对象或其父级链导致框架设备对象的对象。 |
|
WDF_DPC_CONFIG 结构的 AutomaticSerialization 成员设置为 TRUE,但父对象的执行级别设置为 WdfExecutionLevelPassive。 |
有关 WdfDpcCreate 方法可能返回的其他返回值的列表,请参阅 框架对象创建错误。
此方法还可能返回其他 NTSTATUS 值。
注解
驱动程序通常从其 EvtDriverDeviceAdd 回调函数中调用 WdfDpcCreate。
驱动程序创建 DPC 对象时,必须在 WDF_OBJECT_ATTRIBUTES 结构的 ParentObject 成员中指定父对象。 父对象可以是框架设备对象,也可以是其父级链导致框架设备对象的任何对象。 框架在删除设备对象时会删除 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) |
Library | Wdf01000.sys (请参阅框架库版本控制.) |
IRQL | <=DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate (kmdf) 、 KmdfIrql (kmdf) 、 KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf) |