Compartir a través de


estructura WDF_OBJECT_ATTRIBUTES (wdfobject.h)

[Se aplica a KMDF y UMDF]

La estructura WDF_OBJECT_ATTRIBUTES describe los atributos que se pueden asociar a cualquier objeto de marco.

Sintaxis

typedef struct _WDF_OBJECT_ATTRIBUTES {
  ULONG                          Size;
  PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback;
  PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback;
  WDF_EXECUTION_LEVEL            ExecutionLevel;
  WDF_SYNCHRONIZATION_SCOPE      SynchronizationScope;
  WDFOBJECT                      ParentObject;
  size_t                         ContextSizeOverride;
  PCWDF_OBJECT_CONTEXT_TYPE_INFO ContextTypeInfo;
} WDF_OBJECT_ATTRIBUTES, *PWDF_OBJECT_ATTRIBUTES;

Miembros

Size

Tamaño, en bytes, de esta estructura.

EvtCleanupCallback

Puntero a la función de devolución de llamada EvtCleanupCallback del controlador o NULL.

EvtDestroyCallback

Puntero a la función de devolución de llamada EvtDestroyCallback del controlador o NULL.

ExecutionLevel

Valor WDF_EXECUTION_LEVEL con tipo que especifica el IRQL máximo en el que el marco llamará a las funciones de devolución de llamada de eventos del objeto. Para obtener una lista de objetos de marco para los que el controlador puede especificar un valor ExecutionLevel , consulte WDF_EXECUTION_LEVEL.

SynchronizationScope

Valor con tipo WDF_SYNCHRONIZATION_SCOPE que especifica cómo sincronizará la ejecución del marco de trabajo de las funciones de devolución de llamada de eventos del objeto. Para obtener una lista de objetos de marco para los que el controlador puede especificar un valor SynchronizationScope , consulte WDF_SYNCHRONIZATION_SCOPE.

ParentObject

Identificador del objeto primario del objeto o NULL si el objeto no tiene un elemento primario especificado por el controlador.

Consulte Resumen de objetos de marco para obtener una tabla que muestre los objetos que permiten un elemento primario especificado por el controlador. La tabla también muestra el elemento primario predeterminado de cada objeto.

ContextSizeOverride

Si no es cero, este valor invalida el miembro ContextSize de la estructura WDF_OBJECT_CONTEXT_TYPE_INFO a la que hace referencia el miembro ContextTypeInfo . Este valor es opcional y puede ser cero. Si el valor no es cero, debe especificar un tamaño, en bytes, mayor que el valor especificado para el miembro ContextSize de la estructura WDF_OBJECT_CONTEXT_TYPE_INFO. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

ContextTypeInfo

Puntero a una estructura de WDF_OBJECT_CONTEXT_TYPE_INFO . La macro WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE establece este puntero.

Comentarios

La estructura WDF_OBJECT_ATTRIBUTES se usa como argumento de entrada para varios métodos que crean objetos de marco.

Para inicializar una estructura de WDF_OBJECT_ATTRIBUTES, el controlador debe llamar a WDF_OBJECT_ATTRIBUTES_INIT.

Además, si va a definir información de contexto específica del objeto para un objeto, debe usar la macro WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE .

Como alternativa, puede usar la macro WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE en lugar de las macros WDF_OBJECT_ATTRIBUTES_INIT y WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE.

Para obtener más información sobre el uso de estas macros, vea Espacio de contexto de objetos de marco.

Use el miembro ContextSizeOverride de WDF_OBJECT_ATTRIBUTES si desea crear un espacio de contexto de objeto que tenga una longitud variable. Por ejemplo, puede definir una estructura de espacio de contexto que contenga una matriz, como se indica a continuación:

typedef struct _MY_REQUEST_CONTEXT {
  ULONG  ByteCount;
  BYTE  Bytes[1];
} MY_REQUEST_CONTEXT, *PMY_REQUEST_CONTEXT;

WDF_DECLARE_CONTEXT_TYPE(MY_REQUEST_CONTEXT);

Cuando el controlador crea un objeto que usa la estructura del espacio de contexto, puede usar el miembro ContextSizeOverride para especificar el tamaño de contexto necesario para cada objeto individual. Por ejemplo, el controlador podría calcular el número de bytes necesarios en la matriz del ejemplo anterior y, a continuación, usar ContextSizeOverride para especificar los bytes adicionales, como se indica a continuación:

WDF_OBJECT_ATTRIBUTES MyRequestObjectAttributes;
PMY_REQUEST_CONTEXT pMyContext;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &MyRequestObjectAttributes,
                                        MY_REQUEST_CONTEXT
                                        );
MyRequestObjectAttributes.ContextSizeOverride =
                          sizeof(MY_REQUEST_CONTEXT) + Num_Extra_Bytes - 1;

A continuación, el controlador puede crear un objeto con un tamaño de contexto personalizado.

status = WdfRequestCreate(
                          &MyRequestObjectAttributes,
                          ioTarget,
                          &newRequest
                          );

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.

Requisitos

Requisito Value
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfobject.h (incluya Wdf.h)

Consulte también

WDF_OBJECT_ATTRIBUTES_INIT

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE

WdfObjectAllocateContext