ObDereferenceObject 宏 (wdm.h)
ObDereferenceObject 例程递减给定对象的引用计数并执行保留检查。
语法
void ObDereferenceObject(
[in] a
);
参数
[in] a
指向对象主体的指针。
返回值
无
备注
ObDereferenceObject 返回为系统使用保留的值。 驱动程序必须将此值视为 VOID。
ObDereferenceObject 将对象的引用计数减少 1。 如果对象创建为临时 (创建) 时未指定OBJ_PERMANENT标志,并且引用计数为零,则系统可以删除该对象。
驱动程序可以通过将其引用计数减少到零来删除其创建的临时对象。 驱动程序绝不能尝试删除它未创建的对象。
如果对象是使用指定的 OBJ_PERMANENT 对象属性标志创建的,则对象是永久性的。 (有关对象属性的详细信息,请参阅 InitializeObjectAttributes.) 创建的永久对象引用计数为 1,因此在驱动程序取消引用时不会删除它。 驱动程序只能删除它通过使用 ZwMakeTemporaryObject 例程将其设置为临时的永久对象。 使用以下步骤删除创建的永久对象:
调用 ObDereferenceObject。
如有必要,调用相应的 ZwOpenXxx 或 ZwCreateXxx 例程以获取对象的句柄。
使用步骤 2 中获取的句柄调用 ZwMakeTemporaryObject 。
使用步骤 2 中获取的句柄调用 ZwClose 。
当当前线程使用 ObDereferenceObject) 立即删除 (对象时,对任何对象(尤其是内核事务管理器 (KTM) 对象)使用 ObDereferenceObjectDeferDelete 而不是 ObDereferenceObject。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) |