Fonction ObDereferenceObjectDeferDeleteWithTag (wdm.h)

La routine ObDereferenceObjectDeferDeleteWithTag décrémente le nombre de références pour l’objet spécifié, reporte la suppression de l’objet pour éviter les interblocages et écrit une valeur de balise de quatre octets dans l’objet pour prendre en charge le suivi des références d’objet.

Syntaxe

void ObDereferenceObjectDeferDeleteWithTag(
  [in] PVOID Object,
  [in] ULONG Tag
);

Paramètres

[in] Object

Pointeur vers l’objet. L’appelant obtient ce pointeur lors de la création de l’objet ou à partir d’un appel précédent à la routine ObReferenceObjectByHandleWithTag après l’ouverture de l’objet.

[in] Tag

Spécifie une valeur de balise personnalisée de quatre octets. Pour plus d'informations, consultez la section Notes qui suit.

Valeur de retour

None

Remarques

ObDereferenceObjectDeferDeleteWithTag est similaire à ObDereferenceObjectWithTag , sauf que, lorsque le nombre de références de l’objet atteint zéro, ObDereferenceObjectDeferDeleteWithTag transmet la demande de suppression d’objet à un thread worker. Le thread de travail, qui s’exécute à IRQL = PASSIVE_LEVEL, supprime ultérieurement l’objet.

Si la suppression immédiate d’un objet par le thread actuel peut provoquer un blocage, n’appelez pas ObDereferenceObjectWithTag pour déréférencer l’objet. Au lieu de cela, appelez ObDereferenceObjectDeferDeleteWithTag pour déréférencer l’objet.

Par exemple, un tel blocage peut se produire si ObDereferenceObjectWithTag est utilisé pour déréférencer un objet KTM ( Kernel Transaction Manager ) lorsqu’un pilote de niveau supérieur sur la pile de pilotes contient un verrou.

Pour plus d’informations sur la permanence des objets et les attributs d’objet, consultez ObDereferenceObjectWithTag. Pour plus d’informations sur les références d’objet, consultez Cycle de vie d’un objet.

La routine ObDereferenceObjectDeferDelete est similaire à ObDereferenceObjectDeferDeleteWithTag, sauf qu’elle ne permet pas à l’appelant d’écrire une balise personnalisée dans un objet. Dans Windows 7 et les versions ultérieures de Windows, ObDereferenceObjectDeferDelete écrit toujours une valeur de balise par défaut ('tlfD') dans l’objet. Un appel à ObDereferenceObjectDeferDelete a le même effet qu’un appel à ObDereferenceObjectDeferDeleteWithTag qui spécifie Tag = 'tlfD'.

Pour afficher une trace de référence d’objet dans les outils de débogage Windows, utilisez l’extension !obtrace du débogueur en mode noyau. Dans Windows 7, l’extension !obtrace est améliorée pour afficher les balises de référence d’objet, si le suivi de référence d’objet est activé. Par défaut, le suivi des références d’objet est désactivé. Utilisez l’éditeur d’indicateurs globaux (Gflags) pour activer le suivi de référence d’objet. Pour plus d’informations, consultez Suivi de référence d’objet avec des balises.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows 7 et versions ultérieures du système d’exploitation Windows.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Voir aussi

ObDereferenceObjectDeferDelete

ObDereferenceObjectWithTag

ObReferenceObjectByHandleWithTag