Функция 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 |