Funzione ObDereferenceObjectDeferDeleteWithTag (wdm.h)
La routine ObDereferenceObjectDeferDeleteWithTag decrementa il conteggio dei riferimenti per l'oggetto specificato, rinvia l'eliminazione dell'oggetto per evitare deadlock e scrive un valore di tag a quattro byte nell'oggetto per supportare la traccia dei riferimenti agli oggetti.
Sintassi
void ObDereferenceObjectDeferDeleteWithTag(
[in] PVOID Object,
[in] ULONG Tag
);
Parametri
[in] Object
Puntatore all'oggetto . Il chiamante ottiene questo puntatore quando crea l'oggetto o da una chiamata precedente alla routine ObReferenceObjectByHandleWithTag dopo l'apertura dell'oggetto.
[in] Tag
Specifica un valore di tag personalizzato a quattro byte. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.
Valore restituito
nessuno
Osservazioni
ObDereferenceObjectDeferDeleteWithTag è simile a ObDereferenceObjectWithTag , ad eccezione del fatto che, quando il conteggio dei riferimenti dell'oggetto raggiunge zero, ObDereferenceObjectDeferDeleteWithTag passa la richiesta di eliminazione dell'oggetto a un thread di lavoro. Il thread di lavoro, che viene eseguito in IRQL = PASSIVE_LEVEL, in seguito elimina l'oggetto.
Se l'eliminazione immediata di un oggetto da parte del thread corrente potrebbe causare un deadlock, non chiamare ObDereferenceObjectWithTag per dereferenziare l'oggetto. Chiamare invece ObDereferenceObjectDeferDeleteWithTag per dereferenziare l'oggetto.
Ad esempio, un deadlock di questo tipo può verificarsi se ObDereferenceObjectWithTag viene usato per dereferenziare un oggetto Kernel Transaction Manager (KTM) quando un driver di livello superiore nello stack di driver mantiene un blocco.
Per altre informazioni sulla permanenza degli oggetti e sugli attributi dell'oggetto, vedere ObDereferenceObjectWithTag. Per altre informazioni sui riferimenti agli oggetti, vedere Ciclo di vita di un oggetto.
La routine ObDereferenceObjectDeferDelete è simile a ObDereferenceObjectDeferDeleteWithTag, ad eccezione del fatto che non consente al chiamante di scrivere un tag personalizzato in un oggetto . In Windows 7 e versioni successive di Windows ObDereferenceObjectDeferDelete scrive sempre un valore di tag predefinito ('tlfD') nell'oggetto. Una chiamata a ObDereferenceObjectDeferDelete ha lo stesso effetto di una chiamata a ObDereferenceObjectDeferDeleteWithTag che specifica Tag = 'tlfD'.
Per visualizzare una traccia di riferimento a oggetti negli strumenti di debug di Windows, usare l'estensione del debugger !obtrace in modalità kernel. In Windows 7, l'estensione !obtrace è migliorata per visualizzare i tag di riferimento agli oggetti, se è abilitata la traccia dei riferimenti a oggetti. Per impostazione predefinita, la traccia dei riferimenti a oggetti è disattivata. Utilizzare l'Editor flag globali (Gflags) per abilitare la traccia dei riferimenti agli oggetti. Per altre informazioni, vedere Traccia di riferimento a oggetti con tag.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows 7 e versioni successive del sistema operativo Windows. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |