Compartilhar via


Função ObDereferenceObjectDeferDelete (wdm.h)

A rotina ObDereferenceObjectDeferDelete diminui a contagem de referência para o objeto fornecido, verifica a retenção de objetos e evita deadlocks.

Sintaxe

void ObDereferenceObjectDeferDelete(
  [in] PVOID Object
);

Parâmetros

[in] Object

Um ponteiro para o corpo do objeto.

Retornar valor

Nenhum

Comentários

ObDereferenceObjectDeferDelete é semelhante a ObDereferenceObject , exceto que, quando a contagem de referência do objeto atinge zero, o gerenciador de objetos passa a solicitação de exclusão de objeto para um thread de trabalho. Portanto, a exclusão ocorrerá posteriormente em IRQL = PASSIVE_LEVEL.

Use ObDereferenceObjectDeferDelete para qualquer objeto quando a exclusão imediata pelo thread atual do objeto (usando ObDereferenceObject) pode resultar em um deadlock.

Por exemplo, esse deadlock poderá ocorrer se ObDereferenceObject for usado para desreferenciar um objeto KTM (Kernel Transaction Manager ) quando um driver de nível mais alto na pilha de driver estiver mantendo um bloqueio.

Para evitar esses deadlocks, use ObDereferenceObjectDeferDelete em vez de ObDereferenceObject para desreferenciar o objeto KTM.

Para obter informações sobre a persistência e os atributos do objeto, consulte ObDereferenceObject.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho wdm.h (include Fltkernel.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

Confira também

ObDereferenceObject

ObReferenceObject