共用方式為


使用系統的取消微調鎖定

系統會提供單一 取消微調鎖定,會在呼叫特定系統常式時取得或釋放。

變更可取消 IRP 狀態的驅動程式常式,包括可能以STATUS_CANCELLED完成 IRP 的所有常式,都必須根據本節中的指導方針取得並釋放系統取消微調鎖定。

在使用 I/O 管理員提供的裝置佇列的驅動程式中,變更 IRP 可取消狀態以外的任何 驅動程式常式 ,必須先呼叫 IoAcquireCancelSpinLock 以取得系統取消微調鎖定。

取得取消微調鎖定可確保只有呼叫端可以變更該 IRP 的可取消狀態。 當呼叫端持有微調鎖定時,I/O 管理員無法針對該 IRP 呼叫驅動程式的 Cancel 常式。 同樣地,另一個驅動程式常式,例如 DispatchCleanup 常式,無法同時嘗試變更該 IRP 的可取消狀態。

在管理自己的 IRP 佇列並使用驅動程式提供的微調鎖定來同步處理佇列存取的驅動程式中,驅動程式常式不需要在呼叫 IoSetCancelRoutine之前取得取消微調鎖定。 不過,這些驅動程式應該檢查IoSetCancelRoutine傳回的Cancel常式指標,以判斷Cancel常式是否已啟動。 如需詳細資訊 ,請參閱使用Driver-Supplied微調鎖定

任何呼叫 IoAcquireCancelSpinLock 的驅動程式常式都必須儘快呼叫 IoReleaseCancelSpinLock

驅動程式絕對不能使用 IRP 呼叫 IoCompleteRequest ,同時按住微調鎖定。 嘗試在按住微調鎖定時完成 IRP 可能會導致死結。