ObDereferenceObject 宏 (wdm.h)

ObDereferenceObject 例程递减给定对象的引用计数并执行保留检查。

语法

void ObDereferenceObject(
  [in]  a
);

参数

[in] a

指向对象的正文的指针。

返回值

备注

ObDereferenceObject 返回为系统使用保留的值。 驱动程序必须将此值视为 VOID。

ObDereferenceObject 将对象的引用计数减少一个。 如果对象创建为临时 (创建) 时未指定OBJ_PERMANENT标志,并且引用计数达到零,则系统可以删除该对象。

驱动程序可以通过将其引用计数减少到零来删除它创建的临时对象。 驱动程序绝不能尝试删除它未创建的对象。

如果使用指定的OBJ_PERMANENT对象属性标志创建对象,则对象是永久性的。 (有关对象属性的详细信息,请参阅 InitializeObjectAttributes.) 使用引用计数创建永久对象,因此驱动程序取消引用时不会删除该对象。 驱动程序只能使用 ZwMakeTemporaryObject 例程删除它创建的永久对象,使其成为临时对象。 使用以下步骤删除创建的永久对象:

  1. 调用 ObDereferenceObject
  2. 根据需要调用相应的 ZwOpenXxxZwCreateXxx 例程以获取对象的句柄。
  3. 使用步骤 2 中获取的句柄调用 ZwMakeTemporaryObject
  4. 使用步骤 2 中获取的句柄调用 ZwClose
重要 对任何对象使用 ObDereferenceObjectDeferDelete 而不是 ObDereferenceObject(尤其是内核事务管理器 (KTM) 对象)使用 ObDereferenceObject 而不是 ObDereferenceObject (尤其是 内核事务管理器) 对象)使用 ObDereferenceObject,当使用 ObDereferenceObject) (的当前线程立即删除时,可能会导致死锁。
 

要求

   
最低受支持的客户端 在 Windows 2000 和更高版本的 Windows 中可用。
目标平台 通用
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport)

另请参阅

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject