Função ObDereferenceObjectDeferDeleteWithTag (wdm.h)
A rotina ObDereferenceObjectDeferDeleteWithTag diminui a contagem de referência para o objeto especificado, adia a exclusão do objeto para evitar deadlocks e grava um valor de marca de quatro bytes no objeto para dar suporte ao rastreamento de referência de objeto.
Sintaxe
void ObDereferenceObjectDeferDeleteWithTag(
[in] PVOID Object,
[in] ULONG Tag
);
Parâmetros
[in] Object
Um ponteiro para o objeto . O chamador obtém esse ponteiro quando cria o objeto ou de uma chamada anterior para a rotina ObReferenceObjectByHandleWithTag depois de abrir o objeto.
[in] Tag
Especifica um valor de marca personalizada de quatro bytes. Para obter mais informações, consulte a seção Comentários a seguir.
Retornar valor
Nenhum
Comentários
ObDereferenceObjectDeferDeleteWithTag é semelhante a ObDereferenceObjectWithTag , exceto que, quando a contagem de referência do objeto atinge zero, ObDereferenceObjectDeferDeleteWithTag passa a solicitação de exclusão de objeto para um thread de trabalho. O thread de trabalho, que é executado em IRQL = PASSIVE_LEVEL, exclui o objeto posteriormente.
Se a exclusão imediata de um objeto pelo thread atual puder causar um deadlock, não chame ObDereferenceObjectWithTag para desreferenciar o objeto. Em vez disso, chame ObDereferenceObjectDeferDeleteWithTag para desreferenciar o objeto.
Por exemplo, esse deadlock poderá ocorrer se ObDereferenceObjectWithTag for usado para desreferenciar um objeto KTM (Kernel Transaction Manager ) quando um driver de nível superior na pilha de driver estiver mantendo um bloqueio.
Para obter mais informações sobre a persistência de objeto e atributos de objeto, consulte ObDereferenceObjectWithTag. Para obter mais informações sobre referências de objeto, consulte Ciclo de vida de um objeto.
A rotina ObDereferenceObjectDeferDelete é semelhante a ObDereferenceObjectDeferDeleteWithTag, exceto que não permite que o chamador escreva uma marca personalizada em um objeto . No Windows 7 e versões posteriores do Windows, ObDereferenceObjectDeferDelete sempre grava um valor de marca padrão ('tlfD') no objeto. Uma chamada para ObDereferenceObjectDeferDelete tem o mesmo efeito que uma chamada para ObDereferenceObjectDeferDeleteWithTag que especifica Tag = 'tlfD'.
Para exibir um rastreamento de referência de objeto nas ferramentas de depuração do Windows, use a extensão do depurador !obtrace kernel-mode. No Windows 7, a extensão !obtrace é aprimorada para exibir marcas de referência de objeto, se o rastreamento de referência de objeto estiver habilitado. Por padrão, o rastreamento de referência de objeto está desativado. Use o Editor de Sinalizadores Globais (Gflags) para habilitar o rastreamento de referência de objeto. Para obter mais informações, consulte Rastreamento de referência de objeto com marcas.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível no Windows 7 e versões posteriores do sistema operacional Windows. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |