Controllo bug 0x3B: SYSTEM_SERVICE_EXCEPTION

Il controllo dei bug SYSTEM_SERVICE_EXCEPTION ha un valore di 0x0000003B. Ciò indica che si è verificata un'eccezione durante l'esecuzione di una routine che passa dal codice senza privilegi al codice con privilegi.

Importante

Questo articolo è destinato ai programmatori. Se si è un cliente che ha ricevuto un codice di errore della schermata blu durante l'uso del computer, vedere Risolvere gli errori della schermata blu.

parametri SYSTEM_SERVICE_EXCEPTION

Parametro Descrizione
1 Eccezione che ha causato il controllo del bug.
2 Indirizzo dell'istruzione che ha causato il controllo del bug
3 Indirizzo del record di contesto per l'eccezione che ha causato il controllo del bug
4 0 (non usato)

Causa

Questo codice di arresto indica che l'esecuzione del codice ha avuto un'eccezione e il thread sottostante è un thread di sistema.

Ciò può verificarsi perché è stato eseguito l'accesso a un puntatore NULL o a un indirizzo non corretto casuale. Questo a sua volta può essere causato dal danneggiamento prematuro della memoria o dal danneggiamento della struttura dei dati.

Le informazioni sull'eccezione restituite nel parametro 1 sono descritte nei valori NTSTATUS. I codici di eccezione sono definiti in ntstatus.h, un file di intestazione fornito da Windows Driver Kit. (Per altre info, vedi File di intestazione in Windows Driver Kit).

I codici di eccezione comuni includono:

  • 0x80000003: STATUS_BREAKPOINT

    È stato rilevato un punto di interruzione o ASSERT quando non è stato collegato alcun debugger del kernel al sistema.

  • 0xC0000005: STATUS_ACCESS_VIOLATION

    Si è verificata una violazione dell'accesso alla memoria.

Risoluzione

Per determinare la causa specifica e creare una correzione del codice, è necessario l'esperienza di programmazione e l'accesso al codice sorgente del modulo di errore.

Per eseguire il debug di questo problema, usare il comando .cxr (record di contesto di visualizzazione) con il parametro 3 e quindi usare kb (display stack backtrace). È anche possibile impostare un punto di interruzione nel codice che precede questo codice di arresto e tentare di eseguire un unico passaggio nel codice di errore. Usare i comandi u, ub, uu (unassemble) per visualizzare il codice del programma assembly.

L'estensione del debugger !analyze visualizza informazioni sul controllo dei bug e può essere utile per determinare la causa radice. L'esempio seguente è l'output di !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.
...

Per altre informazioni su WinDbg e !analyze, vedere gli argomenti seguenti:

Per altre informazioni sull'utilizzo della memoria di Windows, vedi Windows Internals 7th Edition Part 1 di Paolo Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionribu.

Identificare il driver

Se è possibile identificare un driver responsabile dell'errore, il nome viene stampato sullo schermo blu e memorizzato in memoria nella posizione (PUNICODE_STRING) KiBugCheckDriver. È possibile usare dx (espressione del modello a oggetti del debugger di visualizzazione) per visualizzare questo comando: dx KiBugCheckDriver.

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

Usare l'estensione !error per visualizzare informazioni sul codice eccezione nel parametro 1. Di seguito è riportato un esempio di output di !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.

Esaminare l'output STACK TEXT di WinDbg per informazioni su ciò che era in esecuzione quando si è verificato l'errore. Se sono disponibili più file di dump, confrontare le informazioni per cercare il codice comune presente nello stack. Usare comandi del debugger come kb (backtrace dello stack di visualizzazione) per analizzare il codice di errore.

Usare il comando seguente per elencare i moduli caricati in memoria: lm t n

Usare !memusage per esaminare lo stato generale della memoria di sistema. È anche possibile usare i comandi !pte e !pool per esaminare aree specifiche di memoria.

In passato, questo errore è stato collegato all'uso eccessivo del pool di paging, che può verificarsi a causa di driver grafici in modalità utente che attraversano e passano dati non corretti al codice del kernel. Se si sospetta che questo sia il caso, usare le opzioni del pool in Driver Verifier per raccogliere informazioni aggiuntive.

Driver Verifier

Driver Verifier è uno strumento in esecuzione in tempo reale per esaminare il comportamento dei driver. Ad esempio, Driver Verifier controlla l'uso di risorse di memoria, ad esempio pool di memoria. Se identifica gli errori nell'esecuzione del codice del driver, crea in modo proattivo un'eccezione per consentire l'ulteriore analisi di tale parte del codice driver. Driver Verifier Manager è integrato in Windows ed è disponibile in tutti i PC Windows.

Per avviare Gestione verifica driver, immettere verifier al prompt dei comandi. È possibile configurare i driver da verificare. Il codice che verifica i driver comporta un sovraccarico durante l'esecuzione, quindi provare a verificare il minor numero di driver possibili. Per altre informazioni, vedere Driver Verifier.

Osservazioni:

Per la risoluzione dei problemi generali dei codici di controllo dei bug di Windows, seguire questi suggerimenti:

  • Se di recente sono stati aggiunti nuovi driver di dispositivo o servizi di sistema, provare a rimuoverli o ad aggiornarli. Provare a determinare le modifiche apportate al sistema che hanno causato la visualizzazione del nuovo codice di controllo dei bug.

  • Cercare in Gestione dispositivi per verificare se i dispositivi sono contrassegnati con un punto esclamativo (!), che indica un problema. Esaminare il log eventi visualizzato nelle proprietà per eventuali driver di dispositivo con errori. Provare ad aggiornare il driver correlato.

  • Controllare l'accesso di sistema Visualizzatore eventi per ulteriori messaggi di errore che potrebbero aiutare a individuare il dispositivo o il driver che causa l'errore. Controllare se nel registro di sistema sono presenti errori critici verificatisi nello stesso intervallo di tempo della schermata blu.

  • Se di recente è stato aggiunto hardware al sistema, provare a rimuoverlo o sostituirlo. In alternativa, rivolgersi al produttore per verificare se sono disponibili patch.

Per altre informazioni generali sulla risoluzione dei problemi, vedere Analizzare i dati della schermata blu di controllo dei bug.

Vedi anche

Analisi del dump di arresto anomalo del sistema usando i debugger di Windows (WinDbg)

Analisi di un file di dump in modalità kernel con WinDbg

Riferimento al codice del controllo errori