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


Функция 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_OBJECT_NAME_INVALID
Элемент ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES, указанной параметром ContextAttributes, был недопустимым.
СТАТУС_НЕДОСТАТОЧНЫЕ_РЕСУРСЫ
Не удалось выделить пространство контекста.
STATUS_OBJECT_NAME_EXISTS
Драйвер уже выделил пространство контекста, соответствующее элементу ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES, которая ContextAttributes. В этой ситуации указатель в параметре контекста получает указатель на существующее пространство контекста и не выделяет повторяющееся пространство контекста.
STATUS_DELETE_PENDING
Объект, указывающий параметр Handle, удаляется. В этой ситуации платформа не выделяет пространство контекста.
 

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

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

Замечания

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

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

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

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

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

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

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

Примеры

В следующем примере кода создается пространство контекста для объекта запроса. Пространство контекста основано на структуре 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 (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf)

См. также

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate