Bug check 0xA : IRQL_NOT_LESS_OR_EQUAL
Le contrôle d’erreur IRQL_NOT_LESS_OR_EQUAL a une valeur de 0x0000000A. Ce contrôle d’erreur indique que Microsoft Windows ou un pilote en mode noyau a accédé à une mémoire paginée à une adresse non valide alors que le niveau de requête d’interruption (IRQL) était élevé. La cause est généralement un mauvais pointeur ou un problème de paginabilité.
Important
Cet article s’adresse aux programmeurs. Si vous êtes un client et que vous avez reçu ce code d’erreur d’écran bleu en utilisant votre ordinateur, consultez Résoudre les erreurs d’écran bleu.
Paramètres IRQL_NOT_LESS_OR_EQUAL
Paramètre | Description |
---|---|
1 | L’adresse de la mémoire virtuelle qui n’a pas pu être accédée. Utilisez !pool sur cette adresse pour vérifier s’il s’agit d’un pool paginé. D’autres commandes qui pourraient être utiles pour recueillir des informations sur l’échec sont !pte, !address, et ln (List Nearest Symbols). |
2 | IRQL au moment de la faute. Valeurs : 2 : L’IRQL était à DISPATCH_LEVEL au moment de la faute. |
3 | Champ de bits décrivant l’opération qui a causé la faute. Notez que le bit 3 n’est disponible que sur les chipsets qui prennent en charge ce niveau de rapport. Valeurs du bit 0 : 0 : Opération de lecture 1 : Opération d’écriture Valeurs du bit 3 : 0 : Pas une opération d’exécution 1 : Opération d’exécution Valeurs combinées des bits 0 et 3 : 0x0 : Faute lors de la tentative de LECTURE de l’adresse dans le paramètre 1 0x1 : Faute lors de la tentative d’ÉCRITURE à l’adresse dans le paramètre 1 0x8 : Faute lors de la tentative d’EXÉCUTION de code à partir de l’adresse dans le paramètre 1 Cette valeur est causée par :
|
4 | Le pointeur d’instruction au moment de la faute. Utilisez la commande ln (List Nearest Symbols) sur cette adresse pour voir le nom de la fonction. |
Cause
Ce contrôle d’erreur est causé par des pilotes de périphériques en mode noyau qui utilisent des adresses incorrectes.
Ce contrôle d’erreur indique qu’une tentative a été faite pour accéder à une adresse non valide alors que le niveau de requête d’interruption (IRQL) était élevé. La cause est soit un mauvais pointeur mémoire, soit un problème de paginabilité avec le code du pilote de périphérique.
Les lignes directrices générales que vous pouvez utiliser pour catégoriser le type d’erreur de codage ayant causé le contrôle d’erreur sont les suivantes :
Si le paramètre 1 est inférieur à 0x1000, le problème est probablement une déréférence de pointeur NULL.
Si !pool indique que le paramètre 1 est un pool paginé (ou d’autres types de mémoire paginable), alors l’IRQL est trop élevé pour accéder à ces données. Exécutez à un IRQL inférieur, ou allouez les données dans le pool non paginé.
Si le paramètre 3 indique que le contrôle d’erreur était une tentative d’exécuter du code paginable, alors l’IRQL est trop élevé pour appeler cette fonction. Exécutez à un IRQL inférieur, ou ne marquez pas le code comme paginable.
Il peut s’agir d’un mauvais pointeur causé par une utilisation après libération ou un flip de bits. Examinez la validité du paramètre 1 avec !pte, !address, et ln (list nearest symbols).
Résolution
Si un débogueur noyau est disponible, obtenez une trace d’appels. Commencez par exécuter l’extension de débogueur !analyze pour afficher des informations sur le contrôle d’erreur. L’extension !analyze peut être utile pour déterminer la cause racine. Ensuite, entrez l’une des commandes k* (display stack backtrace) pour afficher la pile d’appels.
Collecter des informations
Examinez le nom du pilote s’il était répertorié sur l’écran bleu.
Consultez le journal système dans l’observateur d’événements pour d’autres messages d’erreur qui pourraient aider à identifier le périphérique ou le pilote qui cause l’erreur. Recherchez les erreurs critiques dans le journal système qui se sont produites dans la même période que l’écran bleu.
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 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 un examen plus approfondi de cette partie du code du pilote. Le gestionnaire de vérification des pilotes est intégré à Windows et est disponible sur tous les PC Windows.
Pour démarrer le gestionnaire de vérification des pilotes, saisissez verifier à l’invite de commande. Vous pouvez configurer quels pilotes vérifier. Le code qui vérifie les pilotes ajoute une surcharge lorsqu’il s’exécute, alors essayez de vérifier le plus petit nombre de pilotes possible. Pour plus d’informations, consultez Type de débogage.
Le code suivant montre un exemple de débogage :
kd> .bugcheck [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000
kd> kb [Lists the stack trace.]
ChildEBP RetAddr Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194
kd> kv [Lists the trap frames.]
ChildEBP RetAddr Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194
kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010202
ErrCode = 00000000
00000000 ??????????????? [The current instruction pointer is NULL.]
kd> kb [Gives the stack trace before the fault.]
ChildEBP RetAddr Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0
Notes
L’erreur qui génère ce contrôle d’erreur survient généralement après l’installation d’un pilote de périphérique défectueux, d’un service système ou d’un BIOS.
Si vous rencontrez le contrôle d’erreur 0xA lors de la mise à niveau vers une version plus récente de Windows, l’erreur peut être causée par un pilote de périphérique, un service système, un antivirus ou un outil de sauvegarde incompatible avec la nouvelle version.
Résolution d’un problème matériel défectueux : Si du matériel a été ajouté récemment au système, retirez-le pour voir si l’erreur se reproduit. Si le matériel existant a échoué, retirez ou remplacez le composant défectueux. Exécutez les diagnostics matériels fournis par le fabricant du système. Pour des détails sur ces procédures, consultez le manuel d’utilisation de votre ordinateur.
Résolution d’un problème de service système défectueux : Désactivez le service et confirmez si cela résout l’erreur. Si c’est le cas, contactez le fabricant du service système pour une mise à jour éventuelle. Si l’erreur survient lors du démarrage du système, examinez les options de réparation de Windows. Pour plus d’informations, consultez Options de récupération dans Windows 10.
Résolution d’un problème de logiciel antivirus : Désactivez le programme et confirmez si cela résout l’erreur. Si c’est le cas, contactez le fabricant du programme pour une mise à jour éventuelle.
Pour des informations générales sur le dépannage des contrôles d’erreur, veuillez consulter la section Analyser les données bleus de vérification des bogues.