WDF_OBJECT_ATTRIBUTES 结构 (wdfobject.h)

[适用于 KMDF 和 UMDF]

WDF_OBJECT_ATTRIBUTES 结构描述可与任何框架对象关联的属性。

语法

typedef struct _WDF_OBJECT_ATTRIBUTES {
  ULONG                          Size;
  PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback;
  PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback;
  WDF_EXECUTION_LEVEL            ExecutionLevel;
  WDF_SYNCHRONIZATION_SCOPE      SynchronizationScope;
  WDFOBJECT                      ParentObject;
  size_t                         ContextSizeOverride;
  PCWDF_OBJECT_CONTEXT_TYPE_INFO ContextTypeInfo;
} WDF_OBJECT_ATTRIBUTES, *PWDF_OBJECT_ATTRIBUTES;

成员

Size

此结构的大小(以字节为单位)。

EvtCleanupCallback

指向驱动程序的 EvtCleanupCallback 回调函数或 NULL 的指针。

EvtDestroyCallback

指向驱动程序的 EvtDestroyCallback 回调函数的指针,或 NULL

ExecutionLevel

一个WDF_EXECUTION_LEVEL类型的值,该值指定框架调用对象的事件回调函数时的最大 IRQL。 有关驱动程序可以指定 ExecutionLevel 值的框架对象的列表,请参阅 WDF_EXECUTION_LEVEL

SynchronizationScope

一个WDF_SYNCHRONIZATION_SCOPE类型的值,该值指定框架如何同步对象的事件回调函数的执行。 有关驱动程序可以指定 SynchronizationScope 值的框架对象的列表,请参阅 WDF_SYNCHRONIZATION_SCOPE

ParentObject

对象的父对象的句柄;如果对象没有驱动程序指定的父对象,则为 NULL

有关显示允许驱动程序指定父级的对象的表,请参阅 框架对象摘要 。 该表还显示了每个对象的默认父级。

ContextSizeOverride

如果不是零,此值将替代 ContextTypeInfo 成员引用的 WDF_OBJECT_CONTEXT_TYPE_INFO 结构的 ContextSize 成员。 此值是可选的,可以为零。 如果值不为零,则必须指定一个大小(以字节为单位),该值大于为 WDF_OBJECT_CONTEXT_TYPE_INFO 结构的 ContextSize 成员指定的值。 有关更多信息,请参见下面的“备注”部分。

ContextTypeInfo

指向 WDF_OBJECT_CONTEXT_TYPE_INFO 结构的指针。 WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE宏设置此指针。

注解

WDF_OBJECT_ATTRIBUTES 结构用作多个创建框架对象的方法的输入参数。

若要初始化WDF_OBJECT_ATTRIBUTES结构,驱动程序必须调用 WDF_OBJECT_ATTRIBUTES_INIT

此外,如果要为对象定义特定于对象的上下文信息,则必须使用 WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE 宏。

或者,可以使用 WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE 宏而不是WDF_OBJECT_ATTRIBUTES_INIT宏和WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE宏。

有关使用这些宏的详细信息,请参阅 框架对象上下文空间

如果要创建长度可变的对象上下文空间,请使用 WDF_OBJECT_ATTRIBUTES 的 ContextSizeOverride 成员。 例如,可以定义包含数组的上下文空间结构,如下所示:

typedef struct _MY_REQUEST_CONTEXT {
  ULONG  ByteCount;
  BYTE  Bytes[1];
} MY_REQUEST_CONTEXT, *PMY_REQUEST_CONTEXT;

WDF_DECLARE_CONTEXT_TYPE(MY_REQUEST_CONTEXT);

当驱动程序创建使用上下文空间结构的对象时,它可以使用 ContextSizeOverride 成员来指定每个单独对象所需的上下文大小。 例如,驱动程序可能会计算前面示例中数组中所需的字节数,然后使用 ContextSizeOverride 指定额外的字节,如下所示:

WDF_OBJECT_ATTRIBUTES MyRequestObjectAttributes;
PMY_REQUEST_CONTEXT pMyContext;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &MyRequestObjectAttributes,
                                        MY_REQUEST_CONTEXT
                                        );
MyRequestObjectAttributes.ContextSizeOverride =
                          sizeof(MY_REQUEST_CONTEXT) + Num_Extra_Bytes - 1;

然后,驱动程序可以创建具有自定义上下文大小的 对象。

status = WdfRequestCreate(
                          &MyRequestObjectAttributes,
                          ioTarget,
                          &newRequest
                          );

有关框架对象层次结构的清理规则的详细信息,请参阅 框架对象生命周期

要求

要求
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfobject.h (包括 Wdf.h)

另请参阅

WDF_OBJECT_ATTRIBUTES_INIT

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE

WdfObjectAllocateContext