Désactivation des API

Le système fournit trois mécanismes pour désactiver les API pour le thread actuel :

  • Régions critiques. Lorsqu’un thread se trouve à l’intérieur d’une région critique, ses API utilisateur et les API de noyau normales ne sont pas exécutées. Les API de noyau spéciales sont toujours exécutées. Pour plus d’informations sur ces types APC, consultez Types d’API.

  • Régions surveillées. Lorsqu’un thread se trouve à l’intérieur d’une région protégée, aucun de ses API n’est exécuté.

  • Élévation de l’IRQL actuel à APC_LEVEL ou à une version ultérieure. Un thread qui s’exécute à IRQL >= APC_LEVEL s’exécute avec tous les API désactivés.

Notez que ces paramètres s’appliquent au thread actuel et n’affectent pas le comportement d’un autre thread.

Certaines routines de prise en charge des pilotes doivent être appelées avec des types particuliers d’API désactivés. Par exemple, les routines qui acquièrent une ressource exécutive (comme ExAcquireResourceSharedLite) doivent être appelées avec des APC de noyau normaux désactivés. D’autres routines doivent être appelées avec des types particuliers d’API activés. Par exemple, toute routine qui s’appuie sur une routine d’achèvement d’E/S (telle que IoVolumeDeviceToDosName) doit être appelée avec des API de noyau spéciales activées. La documentation de chaque routine spécifie si la routine a des restrictions particulières sur l’état d’exécution d’APC.

Un pilote peut entrer explicitement dans une région critique ou protégée en appelant la routine appropriée. Pour plus d’informations, consultez Régions critiques et régions surveillées. Un pilote peut également élever explicitement l’IRQL actuel pour APC_LEVEL en appelant KeRaiseIrql. Le pilote doit ensuite réduire l’IRQL à sa valeur d’origine en appelant KeLowerIrql. L’utilisation d’une région protégée est plus rapide que l’élévation et la réduction de l’IRQL actuel, mais les régions surveillées ne sont disponibles que dans Windows Server 2003 et les versions ultérieures de Windows.

Les opérations mutex suivantes ont le même effet que l’entrée ou la sortie d’une région critique ou protégée ou l’élévation ou l’abaissement de l’IRQL actuel :

  • La conservation d’un objet mutex place implicitement le titulaire dans une région critique.

  • La tenue d’un mutex protégé place implicitement le titulaire dans une région protégée.

  • La tenue d’un mutex rapide augmente implicitement l’IRQL actuel à APC_LEVEL.

Pour plus d’informations sur les objets mutex, consultez Objets Mutex. Pour plus d’informations sur les mutex rapides et surveillés, consultez Mutexes rapides et Mutexe gardés.