Partager via


Bug Check 0x50 : PAGE_FAULT_IN_NONPAGED_AREA

Le bug check PAGE_FAULT_IN_NONPAGED_AREA a une valeur de 0x00000050. Cela indique qu’une mémoire système non valide a été référencée. En général, l’adresse mémoire est incorrecte ou l’adresse mémoire pointe vers une mémoire libérée.

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 de PAGE_FAULT_IN_NONPAGED_AREA

Paramètre Description

1

Adresse mémoire référencée

2

Après la version Windows 1507 (TH1) : x64

0 : Opération de lecture

2 : Opération d’écriture

10 : Opération d’exécution

Après la version Windows 1507 (TH1) : x86

0 : Opération de lecture

2 : Opération d’écriture

10 : Opération d’exécution

Après la version Windows 1507 (TH1) : Arm

0 : Opération de lecture

1 : Opération d’écriture

8 : Opération d’exécution

Avant la version Windows 1507 (TH1) x64 / x86

0 : Opération de lecture

1 : Opération d’écriture

3

Adresse qui a référencé la mémoire (si connue)

4

Type de page fault

0x0 - NONPAGED_BUGCHECK_FREED_PTE - L’adresse référencée se trouve sur une entrée de table de pages marquée comme libre.

0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE L’adresse référencée n’a pas d’entrée de table de pages active valide.

0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - Une tentative de référence à une adresse d’espace de session a été effectuée dans le contexte d’un processus qui n’a pas de session. En général, cela signifie que l’appelant tente d’accéder de manière incorrecte à une adresse de session sans obtenir correctement une référence d’objet au processus correct et s’y attacher au préalable. Ce sous-type de bugcheck & a été utilisé pour la dernière fois dans Windows 10 RS3. Dans Windows 10 RS4 et versions ultérieures, cette erreur est plutôt signalée sous le code 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE).

0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Une tentative de référence à une adresse virtuelle non canonique (illégale) (Paramètre 1) a été effectuée. L’appelant ne devrait jamais essayer d’accéder à cette adresse.

0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - Un code en mode noyau a tenté d’accéder à une adresse virtuelle en mode utilisateur alors que cet accès n’est pas autorisé.

Si le pilote responsable de l’erreur peut être identifié, son nom est affiché sur l’écran bleu et stocké en mémoire à l’emplacement (PUNICODE_STRING) KiBugCheckDriver. Vous pouvez utiliser la commande du débogueur dx pour l’afficher : dx KiBugCheckDriver.

Cause

Le bug check 0x50 peut être causé par l’installation d’un service système défectueux ou d’un code de pilote défectueux. Un logiciel antivirus peut également déclencher cette erreur, tout comme un volume NTFS corrompu.

Cela peut aussi se produire après l’installation d’un matériel défectueux ou en cas de défaillance du matériel installé (généralement lié à une RAM défectueuse, que ce soit la mémoire principale, le cache L2 ou la RAM vidéo).

Notes

Journal des événements : Consultez le journal système dans l’Observateur d’événements pour obtenir des messages d’erreur supplémentaires qui pourraient aider à identifier le périphérique ou le pilote à l’origine de l’erreur. Pour plus d’informations, veuillez consulter la section Ouvrir l’Observateur d’événements. Recherchez dans le journal système des erreurs critiques qui se sont produites dans la même fenêtre temporelle que l’écran bleu.

Résolution d’un pilote défectueux : Examinez le nom du pilote s’il était indiqué sur l’écran bleu ou s’il est présent dans le journal des événements. Contactez le fournisseur du pilote pour savoir si une version mise à jour du pilote est disponible.

Résolution d’un problème de service système défectueux : Désactivez le service et confirmez que 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 que cela résout l’erreur. Si c’est le cas, contactez le fabricant du programme pour une mise à jour éventuelle.

Résolution d’un problème de volume NTFS corrompu : Exécutez Chkdsk /f /r pour détecter et réparer les erreurs du disque. Vous devez redémarrer le système avant que la vérification du disque ne commence sur une partition système. Contactez le fabricant du système de disque dur pour localiser les outils de diagnostic qu’il fournit pour le sous-système de disque dur.

Diagnostics de la mémoire Windows : Exécutez l’outil de diagnostics de la mémoire Windows pour tester la mémoire physique. Sélectionnez le bouton Démarrer, puis sélectionnez le Panneau de configuration. Dans la zone de recherche, tapez Mémoire, puis sélectionnez Diagnostiquer les problèmes de mémoire de votre ordinateur.‌ Une fois le test terminé, utilisez l’Observateur d’événements pour consulter les résultats dans le journal Système. Recherchez l’entrée MemoryDiagnostics-Results pour afficher les résultats.

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. Vous devez exécuter 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.

Pour des informations générales sur le dépannage des écrans bleus, veuillez consulter la section Analyser les données de l’écran bleu du Bug Check et Dépannage avancé des erreurs d’arrêt ou des erreurs d’écran bleu.

Résolution

Pour déterminer la cause spécifique et créer une correction de code, il faut de l’expérience en programmation et avoir accès au code source du module défaillant.

En général, l’adresse référencée se trouve dans la mémoire libérée ou est tout simplement invalide. Cela ne peut pas être protégé par un gestionnaire try - except -- cela ne peut être protégé que par une sonde ou des techniques de programmation similaires. Pour des informations sur la gestion des buffers et les sondes dans les pilotes de systèmes de fichiers, veuillez consulter la section Gestion des buffers. Pour des informations sur les bonnes pratiques pour le développement de pilotes, et les erreurs courantes commises par les développeurs de pilotes, veuillez consulter la section Bonnes pratiques de développement des pilotes de l’équipe Surface.

Utilisez l’extension de débogage !analyze avec l’option -v pour afficher des informations détaillées sur le bug check afin de déterminer la cause principale.

2: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced.  This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: ffffffff00000090, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80240d322f9, If non-zero, the instruction address which referenced the bad memory
	address.
Arg4: 000000000000000c, (reserved)

Dans cet exemple, le paramètre 2 indique que le bug check s’est produit lorsqu’une zone de mémoire était en cours de lecture.

Examinez tous les résultats de la commande !analyze pour obtenir des informations sur ce qui se passait au moment du bug check. Examinez MODULE_NAME: et FAULTING_MODULE: pour voir quel code est impliqué dans la référence à la mémoire système non valide.

Examinez le STACK TEXT pour des indices sur ce qui était en cours d’exécution au moment de l’échec. Si plusieurs fichiers de vidage sont disponibles, comparez les informations pour rechercher du code commun qui se trouve dans la pile.

Utilisez la commande .trap fournie dans les résultats de la commande !analyze pour définir le contexte.

TRAP_FRAME:  fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)

Utilisez les commandes du débogueur telles que kb (Affichage de la trace de la pile) pour enquêter sur le code défectueux.

Utilisez lm t n pour lister les modules chargés en mémoire.

Utilisez la commande d, da, db, dc, dd, dD, df, dp, dq, du, dw (Affichage de la mémoire) pour examiner les zones de mémoire référencées par le paramètre 1 et le paramètre 3.

2: kd> db ffffffff00000090
ffffffff`00000090  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000a0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000b0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000c0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000d0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000e0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000f0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`00000100  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????

Dans ce cas, il ne semble pas y avoir de données dans cette zone de mémoire du paramètre 1, qui est la zone de mémoire qui tentait d’être lue.

Utilisez la commande !address pour examiner le paramètre 3 qui est l’adresse de l’instruction qui a référencé la mauvaise mémoire.

2: kd> !address fffff80240d322f9
Usage:                  Module
Base Address:           fffff802`40ca8000
End Address:            fffff802`415fb000
Region Size:            00000000`00953000
VA Type:                BootLoaded
Module name:            ntoskrnl.exe
Module path:            [\SystemRoot\system32\ntoskrnl.exe]

Utilisez u, ub, uu (Désassembler) avec le paramètre 3, pour examiner l’instruction qui a référencé la mauvaise mémoire. Pour plus d’informations sur le processeur X64 et le langage assembleur, veuillez consulter la section Le processeur x64.

2: kd> u fffff80240d322f9 
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810        mov     rcx,qword ptr [rax+10h]
fffff802`40d322fd eb07            jmp     nt!RtlSubtreePredecessor+0x16 (fffff802`40d32306)
fffff802`40d322ff 488bc1          mov     rax,rcx
fffff802`40d32302 488b4910        mov     rcx,qword ptr [rcx+10h]
fffff802`40d32306 4885c9          test    rcx,rcx
fffff802`40d32309 75f4            jne     nt!RtlSubtreePredecessor+0xf (fffff802`40d322ff)
fffff802`40d3230b c3              ret
fffff802`40d3230c c3              ret

Utilisez ub pour désassembler en arrière à partir d’une adresse donnée.

Utilisez la commande r (Registres) pour examiner ce qui était en cours d’exécution lorsque le système a déclenché le bug check.

2: kd> r
Last set context:
rax=ffffffff00000080 rbx=0000000000000000 rcx=ffffa68337cb7028
rdx=7a107838c48dfc00 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80240d322f9 rsp=ffff840c96510958 rbp=ffffffffffffffff
 r8=ffffffffffffffff  r9=0000000000000000 r10=7ffffffffffffffc
r11=ffff840c96510a10 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei ng nz na pe nc
cs=0010  ss=0018  ds=0000  es=0000  fs=0000  gs=0000             efl=00010282
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810        mov     rcx,qword ptr [rax+10h] ds:ffffffff`00000090=????????????????

Dans ce cas fffff80240d322f9 se trouve dans le registre pointeur d’instruction, rip.

Les commandes !pte et !pool peuvent également être utilisées pour examiner la mémoire.

Utilisez !memusage pour examiner l’état général de la mémoire du système.

Pour plus d’informations sur l’utilisation de la mémoire Windows, veuillez consulter >Windows Internals 7th Edition Part 1 by Pavel Yosifovich, Mark E. Russinovich, David A. Solomon and Alex Ionescu.

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 détecte 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. Utilisez Driver Verifier pour identifier la cause spécifique d’une défaillance.

Pour démarrer le gestionnaire de vérification des pilotes, tapez Verifier à l’invite de commande. Vous pouvez configurer les pilotes que vous souhaitez vérifier. Le code qui vérifie les pilotes ajoute une surcharge lorsqu’il s’exécute, donc essayez de vérifier le plus petit nombre possible de pilotes. Si un pilote défectueux a été identifié, sélectionnez-le. Pour plus d’informations, consultez Type de débogage.

Voir aussi

Référence du Code de vérification de bogue