In questo caso, un thread ha riscontrato l'eccezione
C0000096: STATUS_PRIVILEGED_INSTRUCTION
Executing an instruction not allowed in current machine mode.
Questo errore è stato generato dalla CPU stessa. Alcuni codici hanno tentato di eseguire un'istruzione che non è consentita. Probabilmente ciò è causato dalla corruzione della memoria; dove il codice del kernel ha cercato di eseguire i dati indesiderati.
Questo tipo di errore è davvero impossibile da individuare. C'è stato un errore in "Kernel" codice che non dovrebbe essere successo. È straordinariamente improbabile che ci sia un bug del software in qualsiasi codice di Microsoft; che è quando inizi a guardare altrove.
- Driver di terze parti . Le unità in modalità kernel hanno pieno accesso all'hardware fisico. Qualsiasi bug vagante in qualsiasi driver di terze parti (ad esempio video, audio, rete, USB 3.0, SATA) e può danneggiare il codice o i dati di qualsiasi altra cosa nel sistema. Prossimi passi : prova a rimuovere l'hardware appena aggiunto (quindi alcuni driver di terze parti non sono caricati), prova l'avvio in modalità provvisoria (quindi alcuni driver di terze parti non sono caricati), o reinstalla Windows (quindi alcuni driver di terze parti non vengono caricati)
- Bad RAM . Se un bit è stato ruotato e ha trasformato un'istruzione perfettamente benigna in un'istruzione diversa, non valida, è possibile ottenere questo errore. Prossimi passi : Rimuovi la RAM, sposta la RAM in altri slot, sblocca la RAM, cambia gli alimentatori
overclocking . A volte cose straordinariamente strane possono accadere quando overclock. Speriamo che tutti mandino a Microsoft i loro crash dump; perché Microsoft li indaga. Un errore comune che otterrebbero è quando la CPU sta eseguendo l'istruzione:
xor eax, eax;
Questa è un'operazione straordinariamente semplice che può essere eseguita dalla CPU; sta semplicemente impostando un registro CPU interno EAX
a zero. Non c'è modo può fallire; tranne quando overclock - o altri problemi fisici.
tl; dr: Se hai eliminato il software, allora è l'hardware.
Aggiornare : Metodologia di risoluzione dei problemi
Volevo menzionare i dettagli che ho attraversato, quasi senza pensarci guardando questo errore.
Il primo era l'effettivo codice bugcheck:
0x1000007E - SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
Binging che su Google dà la pagina della documentazione di Microsoft
Bug Check 0x1000007E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
Ciò indica che un thread di sistema ha generato un'eccezione che il gestore degli errori non ha rilevato.
so, dall'esperienza di sviluppatore, che se la mia applicazione (o uno dei suoi thread) sperimenta un "eccezione" e io no "maniglia "Eccezione, Windows finirà per gestirlo uccidendo l'applicazione.Se si verifica un'eccezione non gestita mentre si è in modalità kernel, il sistema operativo non ha altra scelta che gestirlo chiudendo il kernel. quale eccezione era stato gettato. io assunto (erroneamente, si scopre) era un "Violazione di accesso" .
so che tutti i bugcheck sono accompagnati da quattro parametri che descrivono cosa è successo realmente:
- Parametro 1: 0xFFFFFFFFC0000096
- Parametro 2: 0xFFFFF80003610698
- Parametro 3: 0xFFFFF8800614C7B8
- Parametro 4: 0xFFFFF8800614C010
Ma cosa diavolo significano ?! Ecco quando torniamo alla pagina della documentazione, che non li descrive. Ma ciò fa dire:
Il controllo dei bug 0x1000007E ha lo stesso significato e i medesimi parametri di controllo bug 0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED).
Eccellente. E questa altra pagina documenta i parametri:
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED Parametri
I seguenti parametri appaiono sullo schermo blu.
- Parametro 1: il codice di eccezione che non è stato gestito
- Parametro 2: l'indirizzo in cui si è verificata l'eccezione
- Parametro 3: l'indirizzo del record di eccezione
- Parametro 4: l'indirizzo del record di contesto
Questo è quello che volevo, il codice di eccezione che non è stato gestito . Nel tuo caso era un codice di eccezione:
0xFFFFFFFFC0000096
so, per esperienza, che stai usando un Windows a 64 bit, perché quel codice è lungo 64 bit. In realtà voglio solo i 32 bit più bassi:
0xC0000096
Normalmente mi sarei aspettato di trovare quel codice di errore winerror.h
nella mia directory di sviluppo; ma non era lì. Ci sono voluti alcuni Binging, ma ho scoperto che cercavo:
winerror C0000096
portami a una pagina su WineHQ , che ha dichiarato la costante:
STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096
Binging per quella costante mi ha portato a pagina della documentazione Microsoft canonica :
Eccezioni hardware
STATUS_PRIVILEGED_INSTRUCTION
: Esecuzione di un'istruzione non consentita nella modalità macchina corrente.
So anche che questa eccezione è generata dalla CPU si . lo so perché "Istruzione privilegiata" significa che hai provato a eseguire un'istruzione della CPU che non sei autorizzato. posso anche sapere questo perché viene chiamata la pagina Eccezioni hardware .
Quindi siamo al punto in cui era in esecuzione un codice che tentava di eseguire un'istruzione della CPU che non era previsto. Ci sono due possibilità:
- la memoria era corrotta; il software non è stato scritto per provare a eseguire quel codice, ma è quello che è appena finito nella RAM
- è davvero un software bacato e ha cercato di fare qualcosa che non è permesso.
Dato che il codice di Microsoft viene costantemente testato sul campo in milioni di computer ogni giorno, è più probabile:
- essere un problema con il tuo hardware
- un bug nel codice di qualcun altro che causa problemi
Ad ogni modo, quello era Come Ho lavorato su quel bugcheck. Forse sapendo come sono passato, può aiutarti la prossima volta che hai un bugcheck.