Compartir a través de


Macro ObDereferenceObject (wdm.h)

La rutina ObDereferenceObject disminuye el recuento de referencias del objeto dado y realiza comprobaciones de retención.

Sintaxis

void ObDereferenceObject(
  [in]  a
);

Parámetros

[in] a

Puntero al cuerpo del objeto.

Valor devuelto

None

Observaciones

ObDereferenceObject devuelve un valor reservado para el uso del sistema. Los controladores deben tratar este valor como VOID.

ObDereferenceObject reduce el recuento de referencias de un objeto en uno. Si el objeto se creó como temporal (no se especificó la marca OBJ_PERMANENT en la creación) y el recuento de referencias alcanza cero, el sistema puede eliminar el objeto.

Un controlador puede eliminar un objeto temporal que creó reduciendo su recuento de referencias a cero. Un controlador nunca debe intentar eliminar un objeto que no creó.

Un objeto es permanente si se creó con la marca de atributo de objeto OBJ_PERMANENT especificada. (Para obtener más información sobre los atributos de objeto, vea InitializeObjectAttributes). Se crea un objeto permanente con un recuento de referencias de uno, por lo que no se elimina cuando el controlador la desreferencia. Un controlador solo puede eliminar un objeto permanente que creó mediante la rutina ZwMakeTemporaryObject para que sea temporal. Siga estos pasos para eliminar un objeto permanente que ha creado:

  1. Llame a ObDereferenceObject.

  2. Llame a la rutina ZwOpenXxx o ZwCreateXxx adecuada para obtener un identificador para el objeto, si es necesario.

  3. Llame a ZwMakeTemporaryObject con el identificador obtenido en el paso 2.

  4. Llame a ZwClose con el identificador obtenido en el paso 2.

Use ObDereferenceObjectDeferDelete en lugar de ObDereferenceObject para cualquier objeto, especialmente los objetos del Administrador de transacciones kernel (KTM), cuando el subproceso actual del objeto (mediante ObDereferenceObject) pueda provocar un interbloqueo.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport)

Consulte también

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject