0xD1 de vérification des bogues : DRIVER_IRQL_NOT_LESS_OR_EQUAL

Le case activée de bogue DRIVER_IRQL_NOT_LESS_OR_EQUAL a la valeur 0x000000D1. Cela indique qu’un pilote en mode noyau a tenté d’accéder à la mémoire paginable pendant que le processus IRQL était trop élevé.

Important

Cet article est destiné aux programmeurs. Si vous êtes un client qui a reçu un code d’erreur d’écran bleu lors de l’utilisation de votre ordinateur, consultez Résoudre les erreurs d’écran bleu.

paramètres de DRIVER_IRQL_NOT_LESS_OR_EQUAL

Paramètre Description

1

Mémoire référencée.

2

IRQL au moment de la référence.

3

  • 0 - Lecture
  • 1 - Écrire
  • 2 - Exécuter
  • 8 - Exécuter

4

Adresse qui a référencé la mémoire. Utilisez ln (lister les symboles les plus proches) sur cette adresse pour voir le nom de la fonction.

Cause

Pour déterminer la cause, le débogueur Windows, l’expérience de programmation et l’accès au code source du module défaillant sont nécessaires.

En règle générale, lorsque cette erreur se produit, un pilote a tenté d’accéder à une adresse paginable (ou totalement non valide) alors que le niveau de demande d’interruption (IRQL) était trop élevé. Cela peut être provoqué par :

  • Déréférencement d’un pointeur incorrect (tel qu’un pointeur null ou libéré) lors de l’exécution au niveau DISPATCH_LEVEL ou au-dessus.

  • Accès aux données paginables au niveau DISPATCH_LEVEL ou au-dessus.

  • Exécution de code paginable au niveau DISPATCH_LEVEL ou au-dessus.

Si un pilote responsable de l’erreur peut être identifié, son nom est imprimé sur l’écran bleu et stocké en mémoire à l’emplacement (PUNICODE_STRING) KiBugCheckDriver. Vous pouvez utiliser dx (expression de modèle objet du débogueur d’affichage), une commande de débogueur, pour afficher ceci : dx KiBugCheckDriver.

Ce bogue case activée est généralement dû à des pilotes qui ont utilisé des adresses mémoire incorrectes.

Les causes possibles de l’erreur de page incluent les événements suivants :

  • La fonction a été marquée comme paginable et s’exécutait sur un IRQL avec élévation de privilèges (qui inclut l’obtention d’un verrou).

  • L’appel de fonction a été effectué à une fonction dans un autre pilote et ce pilote a été déchargé.

  • La fonction a été appelée à l’aide d’un pointeur de fonction qui n’était pas un pointeur non valide.

Pour plus d’informations sur les IRQL Windows, consultez Windows Internals 7th Edition Part 1 par Pavel Yosifovich, Mark E. Russinovich, David A. Solomon et Alex Ionescu.

Résolution

Si le problème est dû au pilote que vous développez, assurez-vous que la fonction qui s’exécute au moment du bogue case activée est :

  • Non marqué comme paginable
  • N’appelle aucune autre fonction inline qui pourrait être paginée.

L’extension de débogueur !analyze affiche des informations sur le bogue case activée et peut être utile pour déterminer la cause racine. L’exemple suivant est une sortie de !analyze.

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: fffff808add27150, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000000, value 0 = read operation, 1 = write operation
Arg4: fffff808adc386a6, address which referenced memory

Si un pilote responsable de l’erreur peut être identifié, son nom est imprimé sur l’écran bleu et stocké en mémoire à l’emplacement (PUNICODE_STRING) KiBugCheckDriver. Vous pouvez utiliser dx (expression de modèle objet du débogueur d’affichage), une commande de débogueur, pour afficher ceci : dx KiBugCheckDriver.

0: kd> dx KiBugCheckDriver
KiBugCheckDriver                 : 0xffffc6092de892c8 : "Wdf01000.sys" [Type: _UNICODE_STRING *]

Si un frame d’interruption est disponible dans le fichier de vidage, utilisez la commande .trap pour définir votre contexte sur l’adresse fournie.

Pour commencer à déboguer ce type de case activée de bogues, examinez la trace de la pile à l’aide des commandes k, kb, kc, kd, kp, kP, kv (backtrace de la pile d’affichage).

Dans le débogueur, exécutez la commande !irql pour afficher des informations sur l’IRQL d’un processeur sur l’ordinateur cible avant l’arrêt du débogueur. Par exemple :

0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)

Dans la majorité des cas de ce type de bogue case activée, le problème n’est pas le niveau IRQL, mais plutôt la mémoire accessible.

Étant donné que ce bogue case activée est généralement dû à des pilotes qui ont utilisé des adresses mémoire incorrectes, utilisez les paramètres 1, 3 et 4 pour approfondir l’examen.

Utilisez ln (liste des symboles les plus proches) avec le paramètre 4 pour afficher le nom de la fonction appelée. Examinez également la sortie !analyze pour voir si le code défaillant est identifié.

Utilisez !pool sur le paramètre 1 adresse pour voir s’il s’agit d’un pool paginé. Utilisez !address et la commande avancée !pte pour en savoir plus sur cette zone de mémoire.

Utilisez les commandes d’affichage de la mémoire pour examiner la mémoire référencée dans la commande dans le paramètre 1.

Utilisez les commandes u, ub, uu (unassemble) pour examiner le code dans l’adresse qui a référencé la mémoire dans le paramètre 4.

Utilisez la commande lm t n pour répertorier les modules chargés en mémoire. Utilisez !memusage et pour examiner l’état général de la mémoire système.

Driver Verifier

Driver Verifier est un outil qui s’exécute en temps réel pour examiner le comportement des pilotes. Par exemple, Driver Verifier vérifie l’utilisation des ressources de mémoire, telles que les pools de mémoire. S’il identifie des erreurs dans l’exécution du code du pilote, il crée de manière proactive une exception pour permettre à cette partie du code du pilote d’être examinée plus en détail. Le Gestionnaire du vérificateur de pilotes est intégré à Windows et est disponible sur tous les PC Windows.

Pour démarrer le Gestionnaire du vérificateur de pilotes, tapez vérificateur à l’invite de commandes. Vous pouvez configurer les pilotes à vérifier. Le code qui vérifie les pilotes ajoute une surcharge à mesure qu’il s’exécute. Essayez donc de vérifier le plus petit nombre de pilotes possible. Pour plus d’informations, consultez Type de débogage.

Remarques

Si vous n’êtes pas équipé pour utiliser le débogueur Windows pour résoudre ce problème, vous pouvez utiliser certaines techniques de dépannage de base.

  • Vérifiez le observateur d'événements du journal système pour obtenir des messages d’erreur supplémentaires susceptibles d’aider à identifier le périphérique ou le pilote à l’origine de ce bogue case activée.

  • Si un pilote est identifié dans un message de vérification d’erreur, désactivez-le ou contactez le fabricant pour obtenir les mises à jour.

  • Vérifiez que tout nouveau matériel installé est compatible avec la version installée de Windows. Par exemple, vous pouvez obtenir des informations sur le matériel requis dans Windows 10 Spécifications.

Pour obtenir des informations générales supplémentaires sur la résolution des problèmes, consultez Données d’écran bleu.