Macro ObDereferenceObject (wdm.h)

La routine ObDereferenceObject decrementa il conteggio dei riferimenti dell'oggetto specificato ed esegue controlli di conservazione.

Sintassi

void ObDereferenceObject(
  [in]  a
);

Parametri

[in] a

Puntatore al corpo dell'oggetto.

Valore restituito

nessuno

Osservazioni

ObDereferenceObject restituisce un valore riservato per l'uso del sistema. I driver devono considerare questo valore come VOID.

ObDereferenceObject riduce il numero di riferimenti di un oggetto di uno. Se l'oggetto è stato creato come temporaneo (il flag di OBJ_PERMANENT non è stato specificato durante la creazione) e il conteggio dei riferimenti raggiunge zero, l'oggetto può essere eliminato dal sistema.

Un driver può eliminare un oggetto temporaneo creato riducendo il numero di riferimenti a zero. Un driver non deve mai tentare di eliminare un oggetto che non ha creato.

Un oggetto è permanente se è stato creato con il flag di attributo dell'oggetto OBJ_PERMANENT specificato. Per altre informazioni sugli attributi dell'oggetto, vedere InitializeObjectAttributes. Un oggetto permanente viene creato con un conteggio dei riferimenti di uno, quindi non viene eliminato quando il driver lo dereferenzia. Un driver può eliminare solo un oggetto permanente creato usando la routine ZwMakeTemporaryObject per renderlo temporaneo. Per eliminare un oggetto permanente creato, seguire questa procedura:

  1. Chiamare ObDereferenceObject.

  2. Chiamare la routine ZwOpenXxx o ZwCreateXxx appropriata per ottenere un handle per l'oggetto, se necessario.

  3. Chiamare ZwMakeTemporaryObject con l'handle ottenuto nel passaggio 2.

  4. Chiamare ZwClose con l'handle ottenuto nel passaggio 2.

Usare ObDereferenceObjectDeferDelete anziché ObDereferenceObject per qualsiasi oggetto, in particolare Kernel Transaction Manager (KTM), quando l'eliminazione immediata da parte del thread corrente dell'oggetto (tramite ObDereferenceObject) potrebbe causare un deadlock.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport)

Vedi anche

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject