ObDereferenceObject 宏 (wdm.h)

ObDereferenceObject 例程會遞減指定的對象的參考計數,並執行保留檢查。

語法

void ObDereferenceObject(
  [in]  a
);

參數

[in] a

對象的主體指標。

傳回值

備註

ObDereferenceObject 會傳回保留給系統使用的值。 驅動程式必須將此值視為 VOID。

ObDereferenceObject 會將對象的參考計數減少一個。 如果物件建立為暫存 (OBJ_PERMANENT 旗標在建立) 時未指定,而且參考計數達到零,系統就可以刪除物件。

驅動程式可以藉由將其參考計數減少為零,來刪除它所建立的暫存物件。 驅動程式絕對不能嘗試刪除它未建立的物件。

如果物件是以指定的OBJ_PERMANENT對象屬性旗標建立,則對像是永久的。 (如需物件屬性的詳細資訊,請參閱 InitializeObjectAttributes.) 使用一個參考計數建立永久物件,因此在驅動程式取值時不會刪除它。 驅動程式只能刪除使用 ZwMakeTemporaryObject 例程建立的永久物件,使其暫存。 使用下列步驟來刪除您所建立的永久物件:

  1. 呼叫 ObDereferenceObject

  2. 視需要呼叫適當的 ZwOpenXxxZwCreateXxx 例程以取得物件的句柄。

  3. 使用步驟 2 中取得的句柄呼叫 ZwMakeTemporaryObject

  4. 使用步驟 2 中取得的句柄呼叫 ZwClose

針對任何物件使用 ObDereferenceObjectDeferDelete 而不是 ObDereferenceObject ,特別是 Kernel Transaction Manager (KTM) 物件時,當使用 ObDereferenceObject (的目前線程立即刪除時,) 可能會導致死結。

規格需求

需求
目標平台 Universal
標頭 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