0x3B de vérification des bogues : SYSTEM_SERVICE_EXCEPTION

La valeur du bogue SYSTEM_SERVICE_EXCEPTION case activée est 0x0000003B. Cela indique qu’une exception s’est produite lors de l’exécution d’une routine qui passe du code non privilégié au code privilégié.

Important

Cet article s’adresse 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.

SYSTEM_SERVICE_EXCEPTION paramètres

Paramètre Description
1 Exception à l’origine du bogue case activée.
2 Adresse de l’instruction à l’origine du bogue case activée
3 Adresse de l’enregistrement de contexte pour l’exception qui a provoqué le bogue case activée
4 0 (Non utilisé)

Cause

Ce code d’arrêt indique que l’exécution du code comportait une exception, et que le thread qui se trouvait en dessous est un thread système.

Cela peut se produire parce qu’un pointeur NULL a été déréférencé ou une adresse incorrecte aléatoire a été accédé. Cela peut être dû à la libération prématurée de la mémoire ou à une altération de la structure des données.

Les informations d’exception retournées dans le paramètre 1 sont décrites dans valeurs NTSTATUS. Les codes d’exception sont définis dans ntstatus.h, un fichier d’en-tête fourni par le Kit de pilotes Windows. (Pour plus d’informations, consultez Fichiers d’en-tête dans le Kit de pilotes Windows).

Les codes d’exception courants sont les suivants :

  • 0x80000003 : STATUS_BREAKPOINT

    Un point d’arrêt ou ASSERT a été rencontré lorsqu’aucun débogueur de noyau n’a été attaché au système.

  • 0xC0000005 : STATUS_ACCESS_VIOLATION

    Une violation d’accès à la mémoire s’est produite.

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’erreur sont nécessaires.

Pour déboguer ce problème, utilisez la commande .cxr (enregistrement de contexte d’affichage) avec le paramètre 3, puis utilisez kb (backtrace de la pile d’affichage). Vous pouvez également définir un point d’arrêt dans le code qui précède ce code d’arrêt et tenter d’avancer en une seule étape dans le code d’erreur. Utilisez les commandes u, ub, uu (unassemble) pour voir le code du programme d’assembly.

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

SYSTEM_SERVICE_EXCEPTION (3b)
An exception happened while executing a system service routine.
Arguments:
Arg1: 00000000c0000005, Exception code that caused the bugcheck
Arg2: fffff802328375b0, Address of the instruction which caused the bugcheck
Arg3: ffff9c0a746c2330, Address of the context record for the exception that caused the bugcheck
Arg4: 0000000000000000, zero.
...

Pour plus d’informations sur WinDbg et !analyze, consultez les rubriques suivantes :

Pour plus d’informations sur l’utilisation de la mémoire Windows, consultez Windows Internals 7th Edition 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon et Alex Ionescu.

Identifier le pilote

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.

kd> dx KiBugCheckDriver
KiBugCheckDriver                 : 0xffffe10b9991e3e8 : "nvlddmkm.sys" [Type: _UNICODE_STRING *]

Utilisez l’extension !error pour afficher des informations sur le code d’exception dans le paramètre 1. Voici un exemple de sortie de !error.

2: kd> !error 00000000c0000005
Error code: (NTSTATUS) 0xc0000005 (3221225477) - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

Examinez la sortie STACK TEXT de WinDbg pour obtenir des indices sur ce qui s’exécute lorsque l’échec s’est produit. Si plusieurs fichiers de vidage sont disponibles, comparez leurs informations pour rechercher le code commun qui se trouve dans la pile. Utilisez des commandes de débogueur telles que kb (backtrace de la pile d’affichage) pour examiner le code d’erreur.

Utilisez la commande suivante pour répertorier les modules chargés en mémoire : lm t n

Utilisez !memusage pour examiner l’état général de la mémoire système. Vous pouvez également utiliser les commandes !pte et !pool pour examiner des zones de mémoire spécifiques.

Dans le passé, cette erreur a été liée à l’utilisation excessive du pool paginé, ce qui peut se produire en raison du croisement de pilotes graphiques en mode utilisateur et du passage de données incorrectes au code du noyau. Si vous pensez que c’est le cas, utilisez les options de pool dans Driver Verifier pour collecter des informations supplémentaires.

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 les 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 de manière plus approfondie. Driver Verifier Manager est intégré à Windows et est disponible sur tous les PC Windows.

Pour démarrer le Gestionnaire du vérificateur de pilotes, entrez le 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

Pour résoudre les problèmes généraux des codes de case activée de bogues Windows, suivez ces suggestions :

  • Si de nouveaux pilotes de périphériques ou services système ont été ajoutés récemment, essayez de les supprimer ou de les mettre à jour. Essayez de déterminer ce qui a changé dans le système qui a provoqué l’apparition du nouveau bogue case activée code.

  • Recherchez dans Gestionnaire de périphériques pour voir si des appareils sont marqués avec un point d’exclamation ( !), ce qui indique un problème. Passez en revue le journal des événements affiché dans les propriétés pour tout pilote de périphérique défaillant. Essayez de mettre à jour le pilote associé.

  • Vérifiez l’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 l’erreur. Recherchez dans le journal système des erreurs critiques qui se sont produites dans la même fenêtre temporelle que l’écran bleu.

  • Si vous avez récemment ajouté du matériel au système, essayez de le supprimer ou de le remplacer. Sinon, contactez le fabricant pour savoir si des correctifs sont disponibles.

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

Voir aussi

Analyse du vidage sur incident à l’aide des débogueurs Windows (WinDbg)

Analyse d’un fichier de vidage Kernel-Mode avec WinDbg

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