Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо к 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. В этой ситуации указатель в параметре контекста получает указатель на существующее пространство контекста и не выделяет повторяющееся пространство контекста. |
|
Объект, указывающий параметр 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) |