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