SynchCritSection 常式簡介
重要區段 是需要獨佔存取硬體資源或驅動程式資料的程式碼區段。 也就是說,其他可以參考相同資源或資料的程式碼不得中斷程式碼,而且資源或資料一次不得由多個處理器參考。
重要區段應限制在 ISR 和 SynchCritSection 常式中。 只有在將目前的處理器 IRQL 提升至裝置的 DIRQL 值並取得微調鎖定之後,系統才會呼叫這些常式。 在 SynchCritSection常式傳回之後,系統會釋放微調鎖定,並降低處理器的 IRQL。
將處理器的 IRQL 提升至裝置的 DIRQL 值,可防止目前的處理器中斷,但優先順序較高的裝置除外。 取得微調鎖定可防止其他處理器執行與該微調鎖定相關聯的任何重要區段程式碼。 (此微調鎖定有時稱為 中斷微調鎖定。)
裝置驅動程式的 StartIo 和 DpcForIsr 或 CustomDpc 常式經常必須存取某些相同的 硬體資源 (,例如裝置暫存器或其他匯流排相對記憶體) 或驅動程式維護的資料,作為驅動程式的 ISR。 視驅動程式的裝置或設計而定,其分派、 AdapterControl、 ControllerControl或計時器常式也可能存取硬體資源或驅動程式維護的資料。
若要呼叫任何非 ISR 關鍵區段,驅動程式必須使用 KeSynchronizeExecution 常式。 這個常式接受 SynchCritSection 常式的位址做為輸入,以及驅動程式定義的內容資訊和中斷物件指標。 系統會使用中斷物件指標來判斷 DIRQL 和微調鎖定,以搭配 SynchCritSection 常式使用。 (驅動程式先前使用 IoConnectInterrupt 函式的 SpinLock 和 SynchronizeIrql 參數提供這些值。)