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

Указатель на функцию обратного вызова EvtDebaseCallback драйвера или ЗНАЧЕНИЕ 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 (include Wdf.h)

См. также раздел

WDF_OBJECT_ATTRIBUTES_INIT

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE

WdfObjectAllocateContext