Compartilhar via


estrutura WDF_OBJECT_ATTRIBUTES (wdfobject.h)

[Aplica-se a KMDF e UMDF]

A estrutura WDF_OBJECT_ATTRIBUTES descreve atributos que podem ser associados a qualquer objeto de estrutura.

Sintaxe

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;

Membros

Size

O tamanho, em bytes, dessa estrutura.

EvtCleanupCallback

Um ponteiro para a função de retorno de chamada EvtCleanupCallback do driver ou NULL.

EvtDestroyCallback

Um ponteiro para a função de retorno de chamada EvtDestroyCallback do driver ou NULL.

ExecutionLevel

Um valor de tipo WDF_EXECUTION_LEVEL que especifica o IRQL máximo no qual a estrutura chamará as funções de retorno de chamada de evento do objeto. Para obter uma lista de objetos de estrutura para os quais o driver pode especificar um valor ExecutionLevel , consulte WDF_EXECUTION_LEVEL.

SynchronizationScope

Um valor de tipo WDF_SYNCHRONIZATION_SCOPE que especifica como a estrutura sincronizará a execução das funções de retorno de chamada de evento do objeto. Para obter uma lista de objetos de estrutura para os quais o driver pode especificar um valor SynchronizationScope , consulte WDF_SYNCHRONIZATION_SCOPE.

ParentObject

Um identificador para o objeto pai do objeto ou NULL se o objeto não tiver um pai especificado pelo driver.

Consulte Resumo de Objetos de Estrutura para uma tabela que mostra os objetos que permitem um pai especificado pelo driver. A tabela também mostra o pai padrão de cada objeto.

ContextSizeOverride

Se não for zero, esse valor substituirá o membro ContextSize da estrutura WDF_OBJECT_CONTEXT_TYPE_INFO referenciada pelo membro ContextTypeInfo . Esse valor é opcional e pode ser zero. Se o valor não for zero, ele deverá especificar um tamanho, em bytes, maior que o valor especificado para o membro ContextSize da estrutura WDF_OBJECT_CONTEXT_TYPE_INFO. Para obter mais informações, consulte a seção Comentários a seguir.

ContextTypeInfo

Um ponteiro para uma estrutura WDF_OBJECT_CONTEXT_TYPE_INFO . A macro WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE define esse ponteiro.

Comentários

A estrutura WDF_OBJECT_ATTRIBUTES é usada como um argumento de entrada para vários métodos que criam objetos de estrutura.

Para inicializar uma estrutura de WDF_OBJECT_ATTRIBUTES, o driver deve chamar WDF_OBJECT_ATTRIBUTES_INIT.

Além disso, se você estiver definindo informações de contexto específicas do objeto para um objeto, deverá usar a macro WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE .

Como alternativa, você pode usar a macro WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE em vez das macros WDF_OBJECT_ATTRIBUTES_INIT e WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE.

Para obter mais informações sobre como usar essas macros, consulte Espaço de contexto do objeto framework.

Use o membro ContextSizeOverride do WDF_OBJECT_ATTRIBUTES se quiser criar um espaço de contexto de objeto que tenha um comprimento variável. Por exemplo, você pode definir uma estrutura de espaço de contexto que contém uma matriz, da seguinte maneira:

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

WDF_DECLARE_CONTEXT_TYPE(MY_REQUEST_CONTEXT);

Quando o driver cria um objeto que usa a estrutura de espaço de contexto, ele pode usar o membro ContextSizeOverride para especificar o tamanho de contexto necessário para cada objeto individual. Por exemplo, o driver pode calcular o número de bytes necessários na matriz do exemplo anterior e, em seguida, usar ContextSizeOverride para especificar os bytes extras, da seguinte maneira:

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;

Em seguida, o driver pode criar um objeto com um tamanho de contexto personalizado.

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

Para obter mais informações sobre as regras de limpeza de uma hierarquia de objetos de estrutura, consulte Ciclo de vida do objeto framework.

Requisitos

Requisito Valor
Versão mínima do KMDF 1.0
Versão mínima do UMDF 2,0
Cabeçalho wdfobject.h (inclua Wdf.h)

Confira também

WDF_OBJECT_ATTRIBUTES_INIT

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE

WdfObjectAllocateContext