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éé :
Appelez ObDereferenceObject.
Appelez la routine ZwOpenXxx ou ZwCreateXxx appropriée pour obtenir un handle pour l’objet, si nécessaire.
Appelez ZwMakeTemporaryObject avec le handle obtenu à l’étape 2.
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) |