Partager via


0x50 de vérification des bogues : PAGE_FAULT_IN_NONPAGED_AREA

Le case activée de bogue PAGE_FAULT_IN_NONPAGED_AREA a la valeur 0x00000050. Cela indique que la 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 la mémoire libérée.

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 PAGE_FAULT_IN_NONPAGED_AREA

Paramètre Description

1

Adresse mémoire référencée

2

Après Windows 1507 (TH1) version - x64

0 : Opération de lecture

2 : Opération d’écriture

10 : Exécuter l’opération

Après Windows 1507 (TH1) version - x86

0 : Opération de lecture

2 : Opération d’écriture

10 : Exécuter l’opération

Après windows 1507 (TH1) version - Arm

0 : Opération de lecture

1 : Opération d’écriture

8 : Exécuter l’opération

Avant Windows 1507 (TH1) version x64 / x86

0 : Opération de lecture

1 : Opération d’écriture

3

Adresse qui a fait référence à la mémoire (si elle est connue)

4

Type d’erreur de page

0x0 - NONPAGED_BUGCHECK_FREED_PTE - L’adresse référencée se trouve sur une entrée de table de pages marquée comme étant 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 sans session. En règle générale, cela signifie que l’appelant tente incorrectement d’accéder à une adresse de session sans obtenir correctement une référence d’objet au processus approprié et s’y attacher d’abord. Cette vérification d’erreur & sous-type 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 la forme 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE).

0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Tentative de référence à une adresse virtuelle non canonique (non valide) (paramètre 1). L’appelant ne doit jamais essayer d’accéder à cette adresse.

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

Si le 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 la commande dx du débogueur pour afficher ce - dx KiBugCheckDriver.

Cause

Les case activée 0x50 de bogues peuvent être causés 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 endommagé.

Il peut également 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 mémoire ram défectueuse, qu’il s’agit de la mémoire main, du cache RAM L2 ou de la mémoire RAM vidéo).

Remarques

Journal des événements : Vérifiez le journal système observateur d'événements pour obtenir des messages d’erreur supplémentaires susceptibles d’aider à identifier le périphérique ou le pilote à l’origine de l’erreur. Pour plus d’informations, consultez Ouvrir 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 si celui-ci était répertorié sur l’écran bleu ou est présent dans le journal des événements. Contactez le fournisseur du pilote pour voir si un pilote mis à jour est disponible.

Résolution d’un problème de service système défectueux : Désactivez le service et vérifiez que cela résout l’erreur. Dans ce cas, contactez le fabricant du service système au sujet d’une mise à jour possible. Si l’erreur se produit lors du démarrage du système, examinez les options de réparation 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 vérifiez que cela résout l’erreur. Si c’est le cas, contactez le fabricant du programme au sujet d’une mise à jour possible.

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

Diagnostics de la mémoire Windows : Exécutez l’outil 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 exécuté, utilisez l’Observateur d’événements pour afficher 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é au système récemment, supprimez-le pour voir si l’erreur se répète. Si le matériel existant a échoué, supprimez ou remplacez le composant défectueux. Vous devez exécuter le matériel diagnostics fourni par le fabricant du système. Pour plus d’informations sur ces procédures, consultez le manuel du propriétaire de votre ordinateur.

Pour obtenir des informations générales sur la résolution des problèmes liés à l’écran bleu, consultez Données d’écran bleu et Résolution avancée des problèmes d’erreur d’arrêt ou d’erreur d’écran bleu.

Résolution

Pour déterminer la cause spécifique et créer un correctif de code, 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, l’adresse référencée est en mémoire libérée ou n’est tout simplement pas valide. Cela ne peut pas être protégé par un try ( à l’exception du gestionnaire ) : il ne peut être protégé que par une sonde ou des techniques de programmation similaires. Pour plus d’informations sur la gestion des mémoires tampons et les sondes dans les pilotes de système de fichiers, consultez Gestion de la mémoire tampon. Pour plus d’informations sur les meilleures pratiques en matière de développement de pilotes et sur les erreurs courantes commises par les développeurs de pilotes, consultez Meilleures pratiques de développement de pilotes d’équipe Surface.

Utilisez l’extension de débogage !analyze avec l’option -v détaillée pour afficher des informations sur le bogue case activée pour déterminer la cause racine.

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 bogue case activée s’est produit lorsqu’une zone de mémoire était en cours de lecture.

Examinez l’ensemble de la sortie !analyze pour obtenir des informations sur ce qui se passait lorsque le bogue case activée s’est produit. Examinez MODULE_NAME : et le FAULTING_MODULE : pour voir quel code est impliqué dans le référencement de la mémoire système non valide.

Examinez stack TEXT pour obtenir des indices sur ce qui s’exécutait lorsque la défaillance s’est produite. Si plusieurs fichiers de vidage sont disponibles, comparez les informations pour rechercher le code commun qui se trouve dans la pile.

Utilisez la commande .trap fournie dans la sortie !analyze pour définir le contexte.

TRAP_FRAME:  fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)

Utilisez des commandes de débogueur telles que kb (Display Stack Backtrace) pour examiner le code défaillant.

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

Utilisez la commande d, da, db, dc, dd, dD, df, dp, dq, du, dw (Display Memory) pour examiner les zones de mémoire référencées par les paramètres 1 et 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 n’y a pas de données dans cette zone de mémoire dans le paramètre 1, qui est la zone de mémoire qui a tenté 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 mémoire incorrecte.

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 (Unassemble)Dissasemble avec le paramètre 3, pour examiner qui a référencé la mémoire incorrecte. Pour plus d’informations sur le processeur X64 et le langage d’assembly, consultez 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 dissassembler vers l’arrière de l’adresse donnée.

Utilisez la commande r (Registers) pour examiner ce qui a été exécuté lors de la vérification du bogue système.

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 du pointeur d’instructions, rip.

La !pte commande et !pool peut également être utilisée pour examiner la mémoire.

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

Pour plus d’informations sur l’utilisation de la mémoire Windows, consultez Windows Internals 7th Edition Part 1 par Pavel Yosifovich, Mark E. Russinovich, David A. Solomon et 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 de 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 à cette partie du code du pilote d’être examinée plus en détail. Le gestionnaire de vérificateur de pilotes est intégré à Windows et est disponible sur tous les PC Windows. Utilisez Driver Verifier pour rechercher la cause spécifique d’un échec.

Pour démarrer le gestionnaire du vérificateur de pilotes, tapez Vérificateur à l’invite de commandes. Vous pouvez configurer les pilotes que vous souhaitez 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. Si un pilote défaillant 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