ObDereferenceObject 宏 (wdm.h)
ObDereferenceObject 例程會遞減指定的對象的參考計數,並執行保留檢查。
語法
void ObDereferenceObject(
[in] a
);
參數
[in] a
對象的主體指標。
傳回值
無
備註
ObDereferenceObject 會傳回保留給系統使用的值。 驅動程式必須將此值視為 VOID。
ObDereferenceObject 會將對象的參考計數減少一個。 如果物件建立為暫存 (OBJ_PERMANENT 旗標在建立) 時未指定,而且參考計數達到零,系統就可以刪除物件。
驅動程式可以藉由將其參考計數減少為零,來刪除它所建立的暫存物件。 驅動程式絕對不能嘗試刪除它未建立的物件。
如果物件是以指定的OBJ_PERMANENT對象屬性旗標建立,則對像是永久的。 (如需物件屬性的詳細資訊,請參閱 InitializeObjectAttributes.) 使用一個參考計數建立永久物件,因此在驅動程式取值時不會刪除它。 驅動程式只能刪除使用 ZwMakeTemporaryObject 例程建立的永久物件,使其暫存。 使用下列步驟來刪除您所建立的永久物件:
呼叫 ObDereferenceObject。
視需要呼叫適當的 ZwOpenXxx 或 ZwCreateXxx 例程以取得物件的句柄。
使用步驟 2 中取得的句柄呼叫 ZwMakeTemporaryObject 。
使用步驟 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) |