Функция WdfObjectAllocateContext (wdfobject.h)

[Применимо к KMDF и UMDF]

Метод WdfObjectAllocateContext выделяет контекстное пространство для указанного объекта платформы.

Синтаксис

NTSTATUS WdfObjectAllocateContext(
  [in]  WDFOBJECT              Handle,
  [in]  PWDF_OBJECT_ATTRIBUTES ContextAttributes,
  [out] PVOID                  *Context
);

Параметры

[in] Handle

Дескриптор объекта платформы.

[in] ContextAttributes

Указатель на предоставленную вызывающей WDF_OBJECT_ATTRIBUTES структуру, описывающую контекстное пространство.

[out] Context

Указатель на расположение, которое получает указатель на выделенное пространство контекста.

Возвращаемое значение

WdfObjectAllocateContext возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:

Код возврата Описание
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
STATUS_OBJECT_NAME_INVALID
Элемент ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES, указан недопустимый параметр ContextAttributes .
STATUS_INSUFFICIENT_RESOURCES
Не удалось выделить пространство контекста.
STATUS_OBJECT_NAME_EXISTS
Драйвер уже выделил контекстное пространство, соответствующее элементу ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES, указанной ContextAttributes . В этом случае указатель в параметре Context получает указатель на существующее пространство контекста и не выделяет повторяющееся пространство контекста.
STATUS_DELETE_PENDING
Объект, который указывает параметр Handle , удаляется. В этом случае платформа не выделяет контекстное пространство.
 

Этот метод также может возвращать другие значения NTSTATUS.

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Как правило, драйверы создают пространство контекста объекта, указывая структуру WDF_OBJECT_ATTRIBUTES при вызове метода создания объекта платформы, например WdfDeviceCreate.

Если требуется, чтобы драйвер выделил несколько типов контекстного пространства для некоторых объектов, драйвер может вызывать WdfObjectAllocateContext один или несколько раз после вызова метода создания объекта. Каждый вызов WdfObjectAllocateContext должен указывать другой тип контекста. (Элемент ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES определяет тип контекста.)

Если драйвер вызывает WdfObjectAllocateContext несколько раз для заданного объекта, можно предоставить отдельные функции обратного вызова EvtCleanupCallback и EvtDegradCallback для каждого контекста .

При вызове WdfObjectAllocateContext не указывайте ParentObject в структуре WDF_OBJECT_ATTRIBUTES .

Когда платформа выделяет контекстное пространство для объекта, она также ноль инициализирует пространство контекста.

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

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

Примеры

В следующем примере кода создается контекстное пространство для объекта запроса. Контекстное пространство основано на структуре REQUEST_CONTEXT примера.

typedef struct _REQUEST_CONTEXT {
  WDFMEMORY InputMemoryBuffer;
  WDFMEMORY OutputMemoryBuffer;
} REQUEST_CONTEXT, *PREQUEST_CONTEXT;

PREQUEST_CONTEXT  reqContext = NULL;
WDF_OBJECT_ATTRIBUTES  attributes;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &attributes,
                                        REQUEST_CONTEXT
                                        );
status = WdfObjectAllocateContext(
                                  Request,
                                  &attributes,
                                  &reqContext
                                  );

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfobject.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf)

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

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate