ObDereferenceObjectDeferDelete 函数 (wdm.h)
ObDereferenceObjectDeferDelete 例程可递减给定对象的引用计数、检查对象保留期并避免死锁。
语法
void ObDereferenceObjectDeferDelete(
[in] PVOID Object
);
参数
[in] Object
指向对象主体的指针。
返回值
无
备注
ObDereferenceObjectDeferDelete 类似于 ObDereferenceObject ,不同之处在于,当对象的引用计数达到零时,对象管理器会将对象删除请求传递给工作线程。 因此,稍后会在 IRQL = PASSIVE_LEVEL 进行删除。
如果对象的当前线程使用 ObDereferenceObject) 立即删除对象 (,则对任何对象使用 ObDereferenceObjectDeferDelete 可能导致死锁。
例如,如果使用 ObDereferenceObject 取消引用 内核事务管理器 (KTM) 对象,则驱动程序堆栈上的较高级别驱动程序持有锁时,可能会出现此类死锁。
若要避免此类死锁,请使用 ObDereferenceObjectDeferDelete 而不是 ObDereferenceObject 取消引用 KTM 对象。
有关对象常量和属性的信息,请参阅 ObDereferenceObject。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | wdm.h (包括 Fltkernel.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |