IoInitializeRemoveLock 宏 (wdm.h)

IoInitializeRemoveLock 例程會初始化裝置對象的移除鎖定。

語法

void IoInitializeRemoveLock(
  [in]  Lock,
  [in]  Tag,
  [in]  Maxmin,
  [in]  HighWater
);

參數

[in] Lock

呼叫端提供的 IO_REMOVE_LOCK 結構的指標,這個例程會使用鎖定的相關信息進行初始化,包括計數器和同步處理事件。 驅動程式寫入器必須將這個結構配置為裝置物件的裝置延伸模組的一部分。

[in] Tag

指定標記,以識別鎖定的建立者。 驅動程式寫入器通常會使用以反向順序指定的 4 個字元字串,例如用於 ExAllocatePoolWithTag 的標籤。

如果已啟用 驅動程式驗證器 ,I/O 系統就會使用此參數。 呼叫端應該一律提供此參數的非零標記值。

[in] Maxmin

指定應保留此鎖定的最大分鐘數。 值為零表示沒有限制。 此值通常會在偵錯期間用來識別保留鎖定時間超過預期的驅動程式例程。

如果已啟用驅動程式驗證器,I/O 系統就會使用此參數。

[in] HighWater

指定鎖定上允許的未完成下載次數上限。 使用 0 指定沒有最大值。 HighWatermark 必須是 <= 0x7FFFFFFF。

如果已啟用驅動程式驗證器,I/O 系統就會使用此參數。

傳回值

備註

驅動程式可以使用移除鎖定來追蹤裝置上的未完成 I/O 作業,並判斷驅動程式何時可以刪除其裝置物件,以回應 IRP_MN_REMOVE_DEVICE 要求。

呼叫 IoInitializeRemoveLock 之前,驅動程式應該在其裝置擴充功能中配置IO_REMOVE_LOCK結構。 當驅動程式初始化裝置對象的其餘裝置擴充功能時,驅動程式通常會在其 AddDevice 例程中呼叫 IoInitializeRemoveLock

IoReleaseRemoveLockAndWait 例程傳回之後,驅動程式應該考慮裝置處於已準備好移除的狀態,而且無法執行 I/O 作業。 因此,驅動程式不得呼叫 IoInitializeRemoveLock 來重新初始化移除鎖定。 驅動程式 驗證器 正在驗證驅動程式時違反此規則,將會導致錯誤檢查。

因為驅動程式會將 IO_REMOVE_LOCK 結構儲存在裝置物件的裝置延伸模組中,所以當驅動程式刪除裝置擴充功能作為處理 IRP_MN_REMOVE_DEVICE 要求的一部分時,會刪除移除鎖定。

如需詳細資訊,請參閱 使用移除鎖定

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 桌面
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL

另請參閱

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait