Функция 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, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Обнаружен недопустимый параметр. |
|
Элемент ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES, указан недопустимый параметр ContextAttributes . |
|
Не удалось выделить пространство контекста. |
|
Драйвер уже выделил контекстное пространство, соответствующее элементу ContextTypeInfo структуры WDF_OBJECT_ATTRIBUTES, указанной ContextAttributes . В этом случае указатель в параметре Context получает указатель на существующее пространство контекста и не выделяет повторяющееся пространство контекста. |
|
Объект, который указывает параметр 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) |