Partager via


Forcer la vérification IRQL

Bien que les pilotes en mode noyau soient interdits d’accéder à la mémoire paginable à un IRQL élevé ou tout en maintenant un verrou de rotation, une telle action peut ne pas être remarquée si la page n’a pas réellement été supprimée du jeu de travail et paginée sur le disque.

Lorsque forcer la vérification IRQL est activée, le vérificateur de pilote exerce une pression extrême sur l’utilisation de la mémoire système. Chaque fois qu’un pilote en cours de vérification demande un verrouillage de rotation, appelle KeSynchronizeExecution ou élève l’IRQL à DISPATCH_LEVEL ou supérieur, l’ensemble du pool paginable système, du code et des données (y compris le code paginable et les données du pilote) sont supprimés du jeu de travail. Si le pilote tente d’accéder à l’une de ces mémoires, le vérificateur de pilotes émet un bogue case activée.

À compter de Windows Vista, cette option permet également au vérificateur de pilote de détecter quand certains objets de synchronisation sont inclus dans la mémoire paginable. Ces objets de synchronisation ne peuvent pas être paginés, car le noyau du système d’exploitation y accède avec des privilèges IRQL élevés. Le vérificateur de pilotes peut détecter les structures paginables KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE et FAST_MUTEX .

Cette pression sur l’utilisation de la mémoire n’affecte pas directement les pilotes qui ne sont pas sélectionnés pour la vérification. Lorsqu’un pilote qui n’est pas sélectionné pour la vérification déclenche l’IRQL, il ne déclenche pas l’action de suppression. Toutefois, lorsqu’un pilote en cours de vérification déclenche l’IRQL, le vérificateur de pilotes supprime les pages qui peuvent être utilisées par les pilotes qui ne sont pas vérifiés. Ainsi, les erreurs validées par les pilotes qui ne sont pas vérifiées peuvent parfois être interceptées lorsque cette option est active.

Surveillance des levers irQL et des verrous de rotation

Le nombre de levers IRQL, de verrous de rotation et d’appels à KeSynchronizeExecution effectués par les pilotes en cours de vérification peut être surveillé. Le nombre de fois où driver verifier a supprimé la mémoire paginable du jeu de travail peut également être surveillé. Ces statistiques peuvent être affichées par le Gestionnaire du vérificateur de pilotes, la ligne de commande Verifier.exe ou dans un fichier journal. Pour plus d’informations, consultez Surveillance des compteurs globaux .

L’extension du débogueur du noyau !verifier peut également être utilisée pour surveiller ces statistiques. Il présente des informations similaires à celles du Gestionnaire du vérificateur de pilotes. Dans Windows XP et versions ultérieures, l’extension !verifier 0x8 affiche un journal des modifications IRQL récentes apportées par les pilotes en cours de vérification. Pour plus d’informations sur les extensions du débogueur, consultez Débogage Windows.

Appel de KeEnterCriticalRegion ou KeLeaveCriticalRegion à DISPATCH_LEVEL ou au-dessus

KeEnterCriticalRegion et KeLeaveCriticalRegion sont des API que vous pouvez utiliser pour synchroniser l’exécution d’une séquence critique de code de pilote avec la remise d’appels de procédure asynchrone (APC) de noyau ordinaires. Les API KeEnterCriticalRegion et KeLeaveCriticalRegion ne peuvent pas être appelées à l’adresse IRQL = DISPATCH_LEVEL ou supérieure. L’appel de KeEnterCriticalRegion ou KeLeaveCriticalRegion à DISPATCH_LEVEL ou version ultérieure peut entraîner un blocage du système ou une altération de la mémoire.

À compter de Windows 7, driver verifier détecte les appels à ces API à DISPATCH_LEVEL ou au-dessus si l’option Forcer la vérification IRQL est activée.

Activation de cette option

Vous pouvez activer la fonctionnalité Forcer la vérification IRQL pour un ou plusieurs pilotes à l’aide du Gestionnaire du vérificateur de pilotes ou de la ligne de commande Verifier.exe. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote.

  • Sur la ligne de commande

    Sur la ligne de commande, l’option Forcer la vérification IRQL est représentée par Bit 1 (0x2). Pour activer Forcer la vérification IRQL, utilisez une valeur d’indicateur 0x2 ou ajoutez 0x2 à la valeur de l’indicateur. Par exemple :

    verifier /flags 0x2 /driver MyDriver.sys
    

    La fonctionnalité sera active après le prochain démarrage.

    Vous pouvez également activer et désactiver Forcer la vérification IRQL sans redémarrer l’ordinateur en ajoutant le paramètre /volatile à la commande. Par exemple :

    verifier /volatile /flags 0x2 /adddriver MyDriver.sys
    

    Ce paramètre prend effet immédiatement, mais il est perdu lorsque vous arrêtez ou redémarrez l’ordinateur. Pour plus d’informations, consultez Utilisation de paramètres volatiles.

    La fonctionnalité Forcer la vérification IRQL est également incluse dans les paramètres standard. Par exemple :

    verifier /standard /driver MyDriver.sys
    
  • Utilisation du Gestionnaire du vérificateur de pilotes

    1. Démarrez le Gestionnaire du vérificateur de pilotes. Tapez Vérificateur dans une fenêtre d’invite de commandes.
    2. Sélectionnez Créer des paramètres personnalisés (pour les développeurs de code), puis cliquez sur Suivant.
    3. Sélectionnez Sélectionner des paramètres individuels dans une liste complète.
    4. Sélectionnez (case activée) Forcer la vérification IRQL.

    La fonctionnalité Forcer la vérification IRQL est également incluse dans les paramètres standard. Pour utiliser cette fonctionnalité, dans le Gestionnaire du vérificateur de pilotes, cliquez sur Créer des paramètres standard.