Partager via


WDF_OBJECT_ATTRIBUTES structure (wdfobject.h)

[S’applique à KMDF et UMDF]

La structure WDF_OBJECT_ATTRIBUTES décrit les attributs qui peuvent être associés à n’importe quel objet framework.

Syntaxe

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;

Membres

Size

Taille, en octets, de cette structure.

EvtCleanupCallback

Pointeur vers la fonction de rappel EvtCleanupCallback du pilote, ou NULL.

EvtDestroyCallback

Pointeur vers la fonction de rappel EvtDestroyCallback du pilote, ou NULL.

ExecutionLevel

Valeur de type WDF_EXECUTION_LEVEL qui spécifie l’IRQL maximal auquel l’infrastructure appellera les fonctions de rappel d’événement de l’objet. Pour obtenir la liste des objets d’infrastructure pour lesquels le pilote peut spécifier une valeur ExecutionLevel , consultez WDF_EXECUTION_LEVEL.

SynchronizationScope

Valeur de type WDF_SYNCHRONIZATION_SCOPE qui spécifie comment l’infrastructure synchronisera l’exécution des fonctions de rappel d’événement de l’objet. Pour obtenir la liste des objets d’infrastructure pour lesquels le pilote peut spécifier une valeur SynchronizationScope , consultez WDF_SYNCHRONIZATION_SCOPE.

ParentObject

Handle de l’objet parent de l’objet, ou NULL si l’objet n’a pas de parent spécifié par le pilote.

Consultez Résumé des objets d’infrastructure pour obtenir un tableau montrant les objets qui autorisent un parent spécifié par un pilote. Le tableau affiche également le parent par défaut de chaque objet.

ContextSizeOverride

Si elle n’est pas égale à zéro, cette valeur remplace le membre ContextSize de la structure WDF_OBJECT_CONTEXT_TYPE_INFO que le membre ContextTypeInfo référence. Cette valeur est facultative et peut être égale à zéro. Si la valeur n’est pas égale à zéro, elle doit spécifier une taille, en octets, supérieure à la valeur spécifiée pour le membre ContextSize de la structure WDF_OBJECT_CONTEXT_TYPE_INFO. Pour plus d'informations, consultez la section Notes qui suit.

ContextTypeInfo

Pointeur vers une structure WDF_OBJECT_CONTEXT_TYPE_INFO . La macro WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE définit ce pointeur.

Remarques

La structure WDF_OBJECT_ATTRIBUTES est utilisée comme argument d’entrée pour plusieurs méthodes qui créent des objets framework.

Pour initialiser une structure WDF_OBJECT_ATTRIBUTES, le pilote doit appeler WDF_OBJECT_ATTRIBUTES_INIT.

En outre, si vous définissez des informations de contexte spécifiques à un objet pour un objet, vous devez utiliser la macro WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE .

Vous pouvez également utiliser la macro WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE au lieu des macros WDF_OBJECT_ATTRIBUTES_INIT et WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE.

Pour plus d’informations sur l’utilisation de ces macros, consultez Framework Object Context Space.

Utilisez le membre ContextSizeOverride de WDF_OBJECT_ATTRIBUTES si vous souhaitez créer un espace de contexte d’objet dont la longueur est variable. Par exemple, vous pouvez définir une structure d’espace de contexte qui contient un tableau, comme suit :

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

WDF_DECLARE_CONTEXT_TYPE(MY_REQUEST_CONTEXT);

Lorsque votre pilote crée un objet qui utilise la structure d’espace de contexte, il peut utiliser le membre ContextSizeOverride pour spécifier la taille de contexte nécessaire pour chaque objet individuel. Par exemple, votre pilote peut calculer le nombre d’octets nécessaires dans le tableau à partir de l’exemple précédent, puis utiliser ContextSizeOverride pour spécifier les octets supplémentaires, comme suit :

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;

Le pilote peut ensuite créer un objet avec une taille de contexte personnalisée.

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

Pour plus d’informations sur les règles de nettoyage d’une hiérarchie d’objets d’infrastructure, consultez Framework Object Life Cycle.

Configuration requise

Condition requise Valeur
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfobject.h (inclure Wdf.h)

Voir aussi

WDF_OBJECT_ATTRIBUTES_INIT

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE

WdfObjectAllocateContext