Función ObDereferenceObjectDeferDeleteWithTag (wdm.h)
La rutina ObDereferenceObjectDeferDeleteWithTag disminuye el recuento de referencias del objeto especificado, aplaza la eliminación del objeto para evitar interbloqueos y escribe un valor de etiqueta de cuatro bytes en el objeto para admitir el seguimiento de referencia de objetos.
Sintaxis
void ObDereferenceObjectDeferDeleteWithTag(
[in] PVOID Object,
[in] ULONG Tag
);
Parámetros
[in] Object
Puntero al objeto . El autor de la llamada obtiene este puntero cuando crea el objeto o desde una llamada anterior a la rutina ObReferenceObjectByHandleWithTag después de abrir el objeto.
[in] Tag
Especifica un valor de etiqueta personalizada de cuatro bytes. Para obtener más información, vea la sección Comentarios que se muestra más adelante.
Valor devuelto
None
Observaciones
ObDereferenceObjectDeferDeleteWithTag es similar a ObDereferenceObjectWithTag , salvo que, cuando el recuento de referencias del objeto alcanza cero, ObDereferenceObjectDeferDeleteWithTag pasa la solicitud de eliminación de objetos a un subproceso de trabajo. El subproceso de trabajo, que se ejecuta en IRQL = PASSIVE_LEVEL, elimina posteriormente el objeto .
Si la eliminación inmediata de un objeto por el subproceso actual puede provocar un interbloqueo, no llame a ObDereferenceObjectWithTag para desreferenciar el objeto. En su lugar, llame a ObDereferenceObjectDeferDeleteWithTag para desreferenciar el objeto.
Por ejemplo, este interbloqueo puede producirse si ObDereferenceObjectWithTag se usa para desreferenciar un objeto administrador de transacciones de kernel (KTM) cuando un controlador de nivel superior de la pila de controladores mantiene un bloqueo.
Para obtener más información sobre la permanencia de objetos y los atributos de objeto, vea ObDereferenceObjectWithTag. Para obtener más información sobre las referencias a objetos, vea Ciclo de vida de un objeto.
La rutina ObDereferenceObjectDeferDelete es similar a ObDereferenceObjectDeferDeleteWithTag, salvo que no permite al autor de la llamada escribir una etiqueta personalizada en un objeto. En Windows 7 y versiones posteriores de Windows, ObDereferenceObjectDeferDelete siempre escribe un valor de etiqueta predeterminado ('tlfD') en el objeto . Una llamada a ObDereferenceObjectDeferDelete tiene el mismo efecto que una llamada a ObDereferenceObjectDeferDeleteWithTag que especifica Tag = 'tlfD'.
Para ver un seguimiento de referencia de objeto en las herramientas de depuración de Windows, use la extensión !obtrace kernel-mode debugger. En Windows 7, la extensión !obtrace se mejora para mostrar etiquetas de referencia de objetos, si está habilitado el seguimiento de referencia de objetos. De forma predeterminada, el seguimiento de referencia de objetos está desactivado. Use el Editor global de marcas (Gflags) para habilitar el seguimiento de referencia de objetos. Para obtener más información, vea Seguimiento de referencia de objetos con etiquetas.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible en Windows 7 y versiones posteriores del sistema operativo Windows. |
Plataforma de destino | Universal |
Encabezado | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |