系統提供三種機制來停用目前線程的 APC:
重要區域。 當線程位於重要區域內時,不會執行其使用者 APC 和一般核心 APC。 將繼續執行特殊核心 APC。 如需這些 APC 類型的詳細資訊,請參閱 APC 種類。
受防護的區域。 當執行緒位於受防護區域內時,不會執行任何一個APC。
將目前的 IRQL 提升為 APC_LEVEL 或更高。 在 IRQL >= APC_LEVEL執行的線程會在停用所有 APC 時執行。
請注意,這些設定會套用至目前的線程,而且不會影響任何其他線程的行為。
某些驅動程式支援例程在呼叫時必須停用特定種類的APC。 例如,取得執行資源的例程(例如 ExAcquireResourceSharedLite)必須在停用正常的核心 APC 後呼叫。 必須在啟用特定種類的 APC 時呼叫其他例程。 例如,任何依賴 I/O 完成例程的例程(例如 IoVolumeDeviceToDosName)都必須以啟用特殊核心 APC 來呼叫。 每個例程的檔會指定例程是否對APC執行狀態有任何特定限制。
驅動程式可以藉由呼叫適當的例程,明確輸入重要或受防護的區域。 如需詳細資訊,請參閱 重要區域和受防護區域。 驅動程式也可以藉由呼叫 KeRaiseIrql,明確地將目前的IRQL提高至APC_LEVEL。 驅動程式接著必須藉由呼叫 KeLowerIrql,將 IRQL 降低為其原始值。 使用受防護區域的速度比提高和降低目前的 IRQL 更快,但受防護區域僅適用於 Windows Server 2003 和更新版本的 Windows。
下列 Mutex 作業的效果與進入或離開重要或受防護區域相同,這些效果包括提高和降低目前的 IRQL:
持有 mutex 物件會隱含地將持有者置於臨界區域內。
持有受防護的 Mutex 會隱含地將持有者放在受防護區域內。
持有快速 Mutex 會隱含將目前的 IRQL 提升至 APC_LEVEL。
如需 mutex 物件的詳細資訊,請參閱 Mutex Objects。 如需快速和受防護 Mutex 的詳細資訊,請參閱 Fast Mutexes 和 Guarded Mutexes。