Макрос ObDereferenceObject (wdm.h)

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

Синтаксис

void ObDereferenceObject(
  [in]  a
);

Параметры

[in] a

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

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

None

Remarks

ObDereferenceObject возвращает значение, зарезервированное для использования системой. Драйверы должны рассматривать это значение как VOID.

ObDereferenceObject уменьшает количество ссылок объекта на один. Если объект был создан как временный (флаг OBJ_PERMANENT не был указан при создании), а число ссылок достигает нуля, система может удалить объект.

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

Объект является постоянным, если он был создан с указанным флагом атрибута объекта OBJ_PERMANENT. (Дополнительные сведения об атрибутах объекта см. в разделе InitializeObjectAttributes.) Постоянный объект создается с количеством ссылок один, поэтому он не удаляется, когда драйвер разыменовывает его. Драйвер может удалить только постоянный объект, созданный с помощью подпрограммы ZwMakeTemporaryObject , чтобы сделать его временным. Чтобы удалить созданный постоянный объект, выполните следующие действия.

  1. Вызовите ObDereferenceObject.

  2. При необходимости вызовите соответствующую подпрограмму ZwOpenXxx или ZwCreateXxx , чтобы получить дескриптор для объекта .

  3. Вызовите ZwMakeTemporaryObject с дескриптором, полученным на шаге 2.

  4. Вызовите ZwClose с дескриптором, полученным на шаге 2.

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

Требования

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

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

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject