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 |