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


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

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

Синтаксис

void ObDereferenceObjectDeferDeleteWithTag(
  [in] PVOID Object,
  [in] ULONG Tag
);

Параметры

[in] Object

Указатель на объект . Вызывающий объект получает этот указатель либо при создании объекта, либо из предыдущего вызова подпрограммы ObReferenceObjectByHandleWithTag после открытия объекта .

[in] Tag

Задает четырехбайтовое значение настраиваемого тега. Дополнительные сведения см. в разделе "Примечания".

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

None

Remarks

ObDereferenceObjectDeferDeleteWithTag похож на ObDereferenceObjectWithTag , за исключением того, что, когда число ссылок объекта достигает нуля, ObDereferObjectDeferDeleteWithTag передает запрос на удаление объекта рабочему потоку. Рабочий поток, который выполняется в IRQL = PASSIVE_LEVEL, затем удаляет объект .

Если немедленное удаление объекта текущим потоком может привести к взаимоблокировке, не вызывайте ObDereferenceObjectWithTag для разыменования объекта. Вместо этого вызовите ObDereferenceObjectDeferDeleteWithTag , чтобы разыменовать объект .

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

Дополнительные сведения о постоянство и атрибуты объекта см. в разделе ObDereferenceObjectWithTag. Дополнительные сведения о ссылках на объекты см. в разделе Жизненный цикл объекта.

Подпрограмма ObDereferenceObjectDeferDelete похожа на ObDereferenceObjectDeferDeleteWithTag, за исключением того, что она не позволяет вызывающему объекту записывать пользовательский тег. В Windows 7 и более поздних версиях Windows ObDereferenceObjectDeferDelete всегда записывает значение тега по умолчанию (tlfD) в объект . Вызов ObDereferenceObjectDeferDelete имеет тот же эффект, что и вызов ObDereferObjectDeferDeleteWithTag , указывающий Tag = 'tlfD'.

Чтобы просмотреть трассировку ссылок на объекты в средствах отладки Windows, используйте расширение отладчика режима ядра !obtrace . В Windows 7 расширение !obtrace улучшено для отображения тегов ссылки на объекты, если включена трассировка ссылок на объекты. По умолчанию трассировка ссылок на объекты отключена. Используйте редактор глобальных флагов (Gflags), чтобы включить трассировку ссылок на объекты. Дополнительные сведения см. в разделе Трассировка ссылок на объекты с тегами.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows 7 и более поздних версиях операционной системы Windows.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

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

ObDereferenceObjectDeferDelete

ObDereferenceObjectWithTag

ObReferenceObjectByHandleWithTag