Condividi tramite


Funzione ObDereferenceObjectDeferDelete (wdm.h)

La routine ObDereferenceObjectDeferDelete decrementa il conteggio dei riferimenti per l'oggetto specificato, verifica la conservazione degli oggetti ed evita i deadlock.

Sintassi

void ObDereferenceObjectDeferDelete(
  [in] PVOID Object
);

Parametri

[in] Object

Puntatore al corpo dell'oggetto.

Valore restituito

nessuno

Osservazioni

ObDereferenceObjectDeferDelete è simile a ObDereferenceObject , ad eccezione del fatto che, quando il numero di riferimenti dell'oggetto raggiunge zero, gestione oggetti passa la richiesta di eliminazione dell'oggetto a un thread di lavoro. Pertanto, l'eliminazione successiva si verifica in IRQL = PASSIVE_LEVEL.

Usare ObDereferenceObjectDeferDelete per qualsiasi oggetto quando l'eliminazione immediata dal thread corrente dell'oggetto (usando ObDereferenceObject) potrebbe causare un deadlock.

Ad esempio, tale deadlock può verificarsi se ObDereferenceObject viene usato per dereferenziare un oggetto Kernel Transaction Manager (KTM) quando un driver di livello superiore nello stack di driver mantiene un blocco.

Per evitare tali deadlock, usare ObDereferenceObjectDeferDelete anziché ObDereferenceObject per dereference KTM.

Per informazioni sulla permanenza e sugli attributi dell'oggetto, vedere ObDereferenceObject.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione wdm.h (include Fltkernel.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

Vedi anche

ObDereferenceObject

ObReferenceObject