Поделиться через


структура 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

Если значение не равно нулю, это значение переопределяет элемент ContextSizeструктуры WDF_OBJECT_CONTEXT_TYPE_INFO , на которую ссылается элемент ContextTypeInfo . Это значение является необязательным и может быть равно нулю. Если значение не равно нулю, необходимо указать размер в байтах, превышающий значение, указанное для элемента ContextSize структуры WDF_OBJECT_CONTEXT_TYPE_INFO. Дополнительные сведения см. в разделе "Примечания".

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.

Дополнительные сведения об использовании этих макросов см. в разделе Пространство контекста объекта платформы.

Используйте элемент ContextSizeOverride WDF_OBJECT_ATTRIBUTES, если требуется создать пространство контекста объекта с переменной длиной. Например, можно определить структуру контекстного пространства, содержащую массив, следующим образом:

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