Compartir a través de


Función WdfObjectAllocateContext (wdfobject.h)

[Se aplica a KMDF y UMDF]

El método WdfObjectAllocateContext asigna espacio de contexto para un objeto de marco especificado.

Sintaxis

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

Parámetros

[in] Handle

Identificador de un objeto de marco.

[in] ContextAttributes

Puntero a una estructura de WDF_OBJECT_ATTRIBUTES proporcionada por el autor de la llamada que describe el espacio de contexto.

[out] Context

Puntero a una ubicación que recibe un puntero al espacio de contexto asignado.

Valor devuelto

WdfObjectAllocateContext devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:

Código devuelto Descripción
STATUS_INVALID_PARAMETER
Se ha detectado un parámetro no válido.
STATUS_OBJECT_NAME_INVALID
El miembro ContextTypeInfo de la estructura WDF_OBJECT_ATTRIBUTES que el parámetro ContextAttributes especificado no era válido.
STATUS_INSUFFICIENT_RESOURCES
No se pudo asignar espacio de contexto.
STATUS_OBJECT_NAME_EXISTS
El controlador ya ha asignado espacio de contexto que coincide con el miembro ContextTypeInfo de la estructura WDF_OBJECT_ATTRIBUTES que especifica ContextAttributes . En esta situación, el puntero del parámetro Context recibe un puntero al espacio de contexto existente y no asigna espacio de contexto duplicado.
STATUS_DELETE_PENDING
El objeto que especifica el parámetro Handle se está eliminando. En esta situación, el marco no asigna espacio de contexto.
 

Este método también podría devolver otros valores NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

Normalmente, los controladores crean espacio de contexto de objeto especificando una estructura WDF_OBJECT_ATTRIBUTES cuando llaman al método de creación de un objeto de marco, como WdfDeviceCreate.

Si desea que el controlador asigne más de un tipo de espacio de contexto a algunos de sus objetos, el controlador puede llamar a WdfObjectAllocateContext una o varias veces después de llamar al método de creación de un objeto. Cada llamada a WdfObjectAllocateContext debe especificar un tipo de contexto diferente. (El miembro ContextTypeInfo de la estructura WDF_OBJECT_ATTRIBUTES identifica el tipo de contexto).

Si el controlador llama a WdfObjectAllocateContext más de una vez para un objeto determinado, puede proporcionar funciones de devolución de llamada EvtCleanupCallback y EvtDestroyCallback independientes para cada contexto.

Al llamar a WdfObjectAllocateContext, no especifique parentObject en la estructura WDF_OBJECT_ATTRIBUTES .

Cuando el marco asigna espacio de contexto para un objeto, también inicializa cero el espacio de contexto.

Para obtener más información sobre el espacio de contexto del objeto, vea Espacio de contexto de objeto de marco.

Para obtener más información sobre las reglas de limpieza de una jerarquía de objetos de marco, vea Ciclo de vida de objetos de marco.

Ejemplos

En el ejemplo de código siguiente se crea espacio de contexto para un objeto de solicitud. El espacio de contexto se basa en la estructura de REQUEST_CONTEXT del ejemplo.

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
                                  );

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfobject.h (incluir Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf)

Consulte también

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate