Compartilhar via


Macro ObDereferenceObject (wdm.h)

A rotina ObDereferenceObject diminui a contagem de referência do objeto fornecido e executa verificações de retenção.

Sintaxe

void ObDereferenceObject(
  [in]  a
);

Parâmetros

[in] a

Ponteiro para o corpo do objeto.

Retornar valor

Nenhum

Comentários

ObDereferenceObject retorna um valor reservado para uso do sistema. Os drivers devem tratar esse valor como VOID.

ObDereferenceObject diminui a contagem de referência de um objeto em um. Se o objeto tiver sido criado como temporário (o sinalizador OBJ_PERMANENT não foi especificado na criação) e a contagem de referência atingir zero, o objeto poderá ser excluído pelo sistema.

Um driver pode excluir um objeto temporário criado diminuindo sua contagem de referência para zero. Um driver nunca deve tentar excluir um objeto que ele não criou.

Um objeto será permanente se tiver sido criado com o sinalizador de atributo de objeto OBJ_PERMANENT especificado. (Para obter mais informações sobre atributos de objeto, consulte InitializeObjectAttributes.) Um objeto permanente é criado com uma contagem de referência de um, portanto, ele não é excluído quando o driver o desreferencia. Um driver só pode excluir um objeto permanente criado usando a rotina ZwMakeTemporaryObject para torná-lo temporário. Use as seguintes etapas para excluir um objeto permanente que você criou:

  1. Chame ObDereferenceObject.

  2. Chame a rotina apropriada de ZwOpenXxx ou ZwCreateXxx para obter um identificador para o objeto, se necessário.

  3. Chame ZwMakeTemporaryObject com o identificador obtido na etapa 2.

  4. Chame ZwClose com o identificador obtido na etapa 2.

Use ObDereferenceObjectDeferDelete em vez de ObDereferenceObject para qualquer objeto, especialmente objetos KTM (Kernel Transaction Manager ), quando a exclusão imediata pelo thread atual do objeto (usando ObDereferenceObject) pode resultar em um deadlock.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDDIs(storport)

Confira também

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject