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 |