Dans ce cas, un thread a rencontré l'exception
C0000096: STATUS_PRIVILEGED_INSTRUCTION
Executing an instruction not allowed in current machine mode.
Cette erreur a été générée par la CPU elle-même. Certains codes ont essayé d'exécuter une instruction qu'il n'est pas autorisé à faire. Cela est probablement dû à une corruption de mémoire. où le code du noyau a essayé d'exécuter des données indésirables.
Ce genre d'erreur est vraiment impossible à cerner. Il y avait une erreur dans "noyau" code qui n'aurait pas dû arriver. Il est extrêmement improbable qu'il existe un bogue logiciel dans le code de Microsoft. qui est quand vous commencez à regarder ailleurs.
- Conducteurs tiers . Les lecteurs en mode noyau ont un accès complet au matériel physique. Tout bogue parasite dans un pilote tiers (vidéo, son, réseau, USB 3.0, SATA, par exemple) peut corrompre le code ou les données de tout autre élément du système. Prochaines étapes : essayez de supprimer le matériel nouvellement ajouté (afin que certains pilotes tiers ne soient pas chargés), essayez de démarrer en mode sans échec (afin que certains pilotes tiers ne soient pas chargés) ou réinstallez Windows (afin que certains pilotes tiers ne soient pas chargés)
- Mauvaise RAM . Si un bit était inversé et qu'une instruction parfaitement bénigne était transformée en une instruction différente, non valide, vous pourriez obtenir cette erreur. Prochaines étapes : Retirez la clé USB, déplacez la RAM vers d'autres emplacements, déverrouillez la RAM, changez de source d'alimentation
Overclocking . Parfois, des choses extraordinairement étranges peuvent se produire lorsque vous overclockez. Espérons que tout le monde envoie à Microsoft ses vidages mémoire sur incident; parce que Microsoft les étudie. Une erreur courante qu'ils obtiendraient est lorsque la CPU exécute l'instruction:
xor eax, eax;
C'est une opération extraordinairement simple que le processeur peut exécuter. il s'agit simplement de définir un registre interne de la CPU EAX
à zéro. Il n'y a pas façon cela peut échouer sauf quand vous overclockez - ou d'autres problèmes physiques.
tl; dr: Si vous avez éliminé le logiciel, c'est le matériel.
Mettre à jour : Méthodologie de dépannage
Je voulais mentionner les détails que j'ai traversés, presque stupidement en regardant cette erreur.
Le premier était le code de vérification de bugs actuel:
0x1000007E - SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
Binging que sur Google donne la page de documentation Microsoft
Vérification de bogue 0x1000007E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
Cela indique qu'un thread système a généré une exception que le gestionnaire d'erreurs n'a pas interceptée.
Je sais par expérience d’être développeur que si mon application (ou l’un de ses threads) rencontre "exception" et je ne le fais pas "manipuler "L'exception, Windows finira par le gérer en tuant l'application. Si une exception non gérée se produit en mode noyau, le système d'exploitation n'a d'autre choix que de le gérer en arrêtant le noyau. Ce qui m'intéressait, c'est lequel exception était jeté. je assumé (à tort, il s’avère) c’était un "Violation d'accès" .
Je sais que toutes les vérifications de bogues sont accompagnées de quatre paramètres décrivant ce qui s'est réellement passé:
- Paramètre 1: 0xFFFFFFFFC0000096
- Paramètre 2: 0xFFFFF80003610698
- Paramètre 3: 0xFFFFF8800614C7B8
- Paramètre 4: 0xFFFFF8800614C010
Mais qu'est-ce que cela signifie? Nous revenons ensuite à la page de documentation, qui ne les décrit pas. Mais ça Est-ce que dire:
La vérification de bogue 0x1000007E a la même signification et les mêmes paramètres que vérification de bogue 0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED).
Excellent. Et cette autre page documente les paramètres:
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED Paramètres
Les paramètres suivants apparaissent sur l'écran bleu.
- Paramètre 1: Le code d'exception qui n'a pas été traité
- Paramètre 2: l'adresse où l'exception s'est produite
- Paramètre 3: l'adresse de l'enregistrement d'exception
- Paramètre 4: l'adresse de l'enregistrement de contexte
C'est ce que je voulais le code d'exception qui n'a pas été traité . Dans votre cas, c'était le code d'exception:
0xFFFFFFFFC0000096
Je sais, par expérience, que vous utilisez Windows 64 bits, car ce code a une longueur de 64 bits. Vraiment, je ne veux que les 32 bits inférieurs:
0xC0000096
Normalement, je m'attendais à trouver ce code d'erreur dans winerror.h
dans mon répertoire de développement; mais ce n'était pas là. Il a fallu un peu de Binging, mais j'ai trouvé cette recherche:
winerror C0000096
conduis-moi à une page sur winehq , qui a déclaré la constante:
STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096
Binging pour cette constante me mène un page de documentation Microsoft canonique :
Exceptions matérielles
STATUS_PRIVILEGED_INSTRUCTION
: Exécution d'une instruction non autorisée en mode machine en cours.
Je sais aussi que cette exception est levée par la CPU lui-même . je le sais parce que "Instruction privilégiée" signifie que vous avez essayé d'exécuter une instruction de la CPU que vous n'êtes pas autorisé. Je peux aussi le savoir parce que la page s'appelle Exceptions matérielles .
Nous en sommes donc au stade où du code était en cours d’exécution, qui tentait d’exécuter une instruction du processeur qu’il n’était pas censé exécuter. Il y a deux possibilités:
- la mémoire était corrompue; le logiciel n'a pas été écrit pour essayer d'exécuter ce code, mais c'est ce qui vient de se retrouver dans la RAM
- c'est vraiment un logiciel bogué, et il a essayé de faire quelque chose qu'il n'est pas autorisé.
Étant donné que le code de Microsoft est constamment testé sur le terrain dans des millions de machines chaque jour, il est plus probable:
- être un problème avec votre matériel
- un bug dans le code de quelqu'un d'autre causant des problèmes
Quoi qu'il en soit, c'était Comment J'ai travaillé sur cette vérification. Peut-être qu'en sachant comment je suis passé par là, cela peut vous aider la prochaine fois que vous rencontrez un problème.