Partager via


Macro ObDereferenceObject (wdm.h)

La routine ObDereferenceObject décrémente le nombre de références de l’objet donné et effectue des vérifications de rétention.

Syntaxe

void ObDereferenceObject(
  [in]  a
);

Paramètres

[in] a

Pointeur vers le corps de l’objet.

Valeur de retour

None

Remarques

ObDereferenceObject retourne une valeur réservée à l’utilisation système. Les pilotes doivent traiter cette valeur comme VOID.

ObDereferenceObject diminue le nombre de références d’un objet d’un. Si l’objet a été créé comme temporaire (l’indicateur de OBJ_PERMANENT n’a pas été spécifié lors de la création) et que le nombre de références atteint zéro, l’objet peut être supprimé par le système.

Un pilote peut supprimer un objet temporaire qu’il a créé en réduisant son nombre de références à zéro. Un pilote ne doit jamais tenter de supprimer un objet qu’il n’a pas créé.

Un objet est permanent s’il a été créé avec l’indicateur d’attribut d’objet OBJ_PERMANENT spécifié. (Pour plus d’informations sur les attributs d’objet, consultez InitializeObjectAttributes.) Un objet permanent est créé avec un nombre de références d’un, de sorte qu’il n’est pas supprimé lorsque le pilote le déréférence. Un pilote peut uniquement supprimer un objet permanent qu’il a créé à l’aide de la routine ZwMakeTemporaryObject pour le rendre temporaire. Procédez comme suit pour supprimer un objet permanent que vous avez créé :

  1. Appelez ObDereferenceObject.

  2. Appelez la routine ZwOpenXxx ou ZwCreateXxx appropriée pour obtenir un handle pour l’objet, si nécessaire.

  3. Appelez ZwMakeTemporaryObject avec le handle obtenu à l’étape 2.

  4. Appelez ZwClose avec le handle obtenu à l’étape 2.

Utilisez ObDereferenceObjectDeferDelete au lieu de ObDereferenceObject pour tout objet, en particulier les objets KTM (Kernel Transaction Manager), lorsque la suppression immédiate par le thread actuel de l’objet (à l’aide d’ObDereferenceObject) peut entraîner un blocage.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport)

Voir aussi

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject