停用 APC

系統提供三種機制來停用目前線程的 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 物件。 如需快速和受防護 Mutex 的詳細資訊,請參閱 Fast Mutexes 和 Guarded Mutexes