IoReleaseRemoveLockAndWait 宏 (wdm.h)
IoReleaseRemoveLockAndWait 例程會釋放驅動程式在先前呼叫 ioAcquireRemoveLock中取得的移除鎖定,並等到所有取得鎖定為止。
語法
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
參數
[in] RemoveLock
呼叫者在上一次呼叫中傳遞至 IoAcquireRemoveLock IO_REMOVE_LOCK 結構的指標。
[in] Tag
在先前呼叫中傳遞至 ioAcquireRemoveLock之呼叫者提供的標記指標。
如果驅動程式在取得鎖定時指定了 Tag,則驅動程式必須在釋放鎖定時指定相同的 Tag。
如果呼叫 IoAcquireRemoveLock 未指定 Tag,則此參數會 NULL。
傳回值
沒有
言論
驅動程式通常會在其分派程式代碼中呼叫此例程,以取得 IRP_MN_REMOVE_DEVICE 要求。 若要允許排入佇列的 I/O 要求完成,每個驅動程式都應該呼叫 IoReleaseRemoveLockAndWait之後, 將移除 IRP 傳遞給下一個較低的驅動程式 ,並在 釋放記憶體之前,先呼叫 IoDetachDevice,或呼叫 IoDeleteDevice。 IoReleaseRemoveLockAndWait 例程會等候公交車司機取消可能未完成的任何 IRP(例如,IRP_MN_WAIT_WAKE IRP)。
驅動程式必須先取得移除鎖定,才能呼叫 IoReleaseRemoveLockAndWait。 一般而言,驅動程式會在 switch 語句之前,先呼叫 IoAcquireRemoveLockDispatchPnp 例程。 因此,會針對每個 PnP 作業取得鎖定,包括在處理 IRP_MN_REMOVE_DEVICE的程式代碼中呼叫 IoReleaseRemoveLockAndWa it 之前所需的擷取。
若要從 IRP_MN_REMOVE_DEVICE 分派程式代碼以外的程式代碼釋放鎖定,請使用 IoReleaseRemoveLock。
IoReleaseRemoveLockAndWait 呼叫特定移除鎖定之後,針對相同移除鎖定 IoAcquireRemoveLock 的後續呼叫將會失敗。 IoReleaseRemoveLockAndWait 在解除移除鎖定的所有未完成下載之前不會傳回。
IoReleaseRemoveLockAndWait 傳回之後,驅動程式應該將裝置視為處於已準備好移除的狀態,且無法執行 I/O 作業。 因此,驅動程式不得呼叫 IoInitializeRemoveLock 例程來重新初始化移除鎖定。 驅動程式驗證器 驗證驅動程式時違反此規則,會導致錯誤檢查。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 桌面 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 |