Поделиться через


Функция ObDereferenceObjectDeferDelete (wdm.h)

Подпрограмма ObDereferenceObjectDeferDelete уменьшает количество ссылок для данного объекта, проверяет хранение объектов и позволяет избежать взаимоблокировок.

Синтаксис

void ObDereferenceObjectDeferDelete(
  [in] PVOID Object
);

Параметры

[in] Object

Указатель на тело объекта .

Возвращаемое значение

None

Remarks

ObDereferenceObjectDeferDelete похож на ObDereferenceObject , за исключением того, что, когда количество ссылок объекта достигает нуля, диспетчер объектов передает запрос на удаление объекта в рабочий поток. Таким образом, удаление выполняется позже в irQL = PASSIVE_LEVEL.

Используйте ObDereferenceObjectDeferDelete для любого объекта, если немедленное удаление текущим потоком объекта (с помощью ObDereferenceObject) может привести к взаимоблокировке.

Например, такая взаимоблокировка может возникнуть, если obDereferenceObject используется для разыменования объекта диспетчера транзакций ядра (KTM), когда драйвер более высокого уровня в стеке драйверов удерживает блокировку.

Чтобы избежать таких взаимоблокировок, используйте ObDereferenceObjectDeferDelete вместо ObDereferenceObject для разыменования объекта KTM.

Сведения о постоянство и атрибуты объекта см. в разделе ObDereferenceObject.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Fltkernel.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

См. также раздел

ObDereferenceObject

ObReferenceObject