Compartilhar via


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

Confira também

ObDereferenceObjectDeferDelete

ObDereferenceObjectWithTag

ObReferenceObjectByHandleWithTag