Controllo bug 0x50: PAGE_FAULT_IN_NONPAGED_AREA
Il controllo dei bug PAGE_FAULT_IN_NONPAGED_AREA ha un valore pari a 0x00000050. Ciò indica che è stato fatto riferimento alla memoria di sistema non valida. In genere l'indirizzo di memoria non è corretto o l'indirizzo di memoria punta alla memoria liberata.
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 PAGE_FAULT_IN_NONPAGED_AREA
Parametro | Descrizione |
---|---|
1 |
Indirizzo di memoria a cui si fa riferimento |
2 |
Dopo La versione di Windows 1507 (TH1) - x64 0: Operazione di lettura 2: Operazione di scrittura 10: Operazione di esecuzione Dopo La versione di Windows 1507 (TH1) - x86 0: Operazione di lettura 2: Operazione di scrittura 10: Operazione di esecuzione Dopo la versione di Windows 1507 (TH1) - Arm 0: Operazione di lettura 1: Operazione di scrittura 8: Operazione di esecuzione Prima di Windows 1507 (TH1) Versione x64/ x86 0: Operazione di lettura 1: Operazione di scrittura |
3 |
Indirizzo a cui si fa riferimento alla memoria (se noto) |
4 |
Tipo di errore di pagina 0x0 - NONPAGED_BUGCHECK_FREED_PTE - L'indirizzo a cui si fa riferimento si trova in una voce di tabella di pagina contrassegnata come gratuita. 0x2 : NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE L'indirizzo a cui si fa riferimento non dispone di una voce di tabella di pagina attiva valida. 0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - È stato effettuato un tentativo di riferimento a un indirizzo dello spazio di sessione nel contesto di un processo che non dispone di una sessione. In genere questo significa che il chiamante tenta di accedere a un indirizzo di sessione in modo non corretto senza ottenere correttamente un riferimento a un oggetto al processo corretto e collegarlo per primo. Questo controllo bug e sottotipo è stato usato per l'ultima volta in Windows 10 RS3. In Windows 10 RS4 e versioni successive, questo errore viene invece visualizzato come 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE). 0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Tentativo di riferimento a un indirizzo virtuale non canonico (non valido) (parametro 1). Il chiamante non deve mai tentare di accedere a questo indirizzo. 0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - Codice in modalità kernel ha tentato di accedere a un indirizzo virtuale in modalità utente quando tale accesso non è consentito. |
Se il driver responsabile dell'errore può essere identificato, il nome viene stampato sullo schermo blu e memorizzato in memoria nella posizione (PUNICODE_STRING) KiBugCheckDriver. È possibile usare il comando dx del debugger per visualizzare questo - dx KiBugCheckDriver
.
Causa
Il controllo dei bug 0x50 può essere causato dall'installazione di un servizio di sistema difettoso o di un codice driver difettoso. Il software antivirus può anche attivare questo errore, in quanto può essere danneggiato un volume NTFS.
Può verificarsi anche dopo l'installazione dell'hardware difettoso o in caso di errore dell'hardware installato (in genere correlato alla RAM difettosa, ad esempio memoria principale, cache RAM L2 o RAM video).
Osservazioni:
Registro eventi: controllare il registro di sistema Visualizzatore eventi per ulteriori messaggi di errore che potrebbero aiutare a individuare il dispositivo o il driver che causa l'errore. Per altre informazioni, vedere Aprire Visualizzatore eventi. Controllare se nel registro di sistema sono presenti errori critici verificatisi nello stesso intervallo di tempo della schermata blu.
Risoluzione di un driver difettoso: esaminare il nome del driver se è stato elencato nella schermata blu o se è presente nel registro eventi. Contattare il fornitore del driver per verificare se è disponibile un driver aggiornato.
Risoluzione di un problema del servizio di sistema difettoso: disabilitare il servizio e confermare che viene risolto l'errore. In tal caso, contattare il produttore del servizio di sistema per un possibile aggiornamento. Se l'errore si verifica durante l'avvio del sistema, esaminare le opzioni di ripristino di Windows. Per altre informazioni, vedere Opzioni di ripristino in Windows 10.
Risoluzione di un problema software antivirus: disabilitare il programma e confermare che questo risolve l'errore. In caso affermativo, contattare il produttore del programma su un possibile aggiornamento.
Risoluzione di un problema di volume NTFS danneggiato: eseguire Chkdsk /f /r per rilevare e correggere gli errori del disco. È necessario riavviare il sistema prima che l'analisi del disco inizi su una partizione di sistema. Contattare la produzione del sistema di driver rigidi per individuare eventuali strumenti di diagnostica forniti per il sotto sistema del disco rigido.
Diagnostica memoria Windows: eseguire lo strumento Diagnostica memoria Windows per testare la memoria fisica. Selezionare il pulsante Start e quindi selezionare il Pannello di controllo. Nella casella di ricerca digitare Memoria e quindi selezionare Diagnostica dei problemi di memoria del computer. Dopo l'esecuzione del test, usare il Visualizzatore eventi per visualizzare i risultati nel log di sistema. Cercare la voce MemoryDiagnostics-Results per visualizzare i risultati.
Risoluzione di un problema hardware difettoso: se l'hardware è stato aggiunto di recente al sistema, rimuoverlo per verificare se l'errore si ripete. Se l'hardware esistente non è riuscito, rimuovere o sostituire il componente difettoso. È consigliabile eseguire la diagnostica hardware fornita dal produttore del sistema. Per informazioni dettagliate su queste procedure, vedere il manuale del proprietario per il computer.
Per informazioni generali sulla risoluzione dei problemi relativi alla schermata blu, vedere Analizzare i dati della schermata blu e la risoluzione avanzata dei problemi relativi all'errore di arresto o schermata blu.
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.
In genere, l'indirizzo a cui si fa riferimento è in memoria liberata o è semplicemente non valido. Questo non può essere protetto da un tentativo, ad eccezione del gestore, che può essere protetto solo da un probe o da tecniche di programmazione simili. Per informazioni sulla gestione del buffer e sui probe nei driver del file system, vedere Gestione del buffer. Per informazioni sulle procedure consigliate per lo sviluppo di driver e sugli errori comuni eseguiti dagli sviluppatori di driver, vedere Procedure consigliate per lo sviluppo di driver di Surface Team.
Usare l'estensione !analyze debug con l'opzione -v verbose per visualizzare informazioni sul controllo dei bug per determinare la causa radice.
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)
In questo esempio Parametro 2 indica che il controllo dei bug si è verificato quando è stata letta un'area di memoria.
Esaminare tutto l'output !analyze per ottenere informazioni su cosa stava succedendo quando si è verificato il controllo dei bug. Esaminare MODULE_NAME: e il FAULTING_MODULE: per vedere quale codice è coinvolto nel fare riferimento alla memoria di sistema non valida.
Esaminare STACK TEXT per informazioni su cosa 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 il comando .trap fornito nell'output !analyze per impostare il contesto.
TRAP_FRAME: fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)
Usare i comandi del debugger, ad esempio usare kb (Display Stack Backtrace) per analizzare il codice di errore.
lm t n
Usare per elencare i moduli caricati nella memoria.
Usare il comando d, da, db, dc, dd, dD, df, dp, dq, du, dw (Display Memory) per analizzare le aree di memoria a cui fa riferimento il parametro 1 e il parametro 3.
2: kd> db ffffffff00000090
ffffffff`00000090 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000a0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000b0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000c0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000d0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000e0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000f0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`00000100 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
In questo caso non sembra che ci siano dati in questa area di memoria nel parametro 1, ovvero l'area di memoria che stava tentando di leggere.
Usare il comando !address per esaminare il parametro 3, ovvero l'indirizzo dell'istruzione che ha fatto riferimento alla memoria non valida.
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]
Usare u, ub, uu (Unassemble)Dissasemble con il parametro 3, per esaminare il che ha fatto riferimento alla memoria non valida. Per altre informazioni sul processore X64 e sul linguaggio di assembly, vedere Processore 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
Utilizzare ub
per disassemblare indietro rispetto all'indirizzo specificato.
Usare il comando r (Registers) per esaminare ciò che è stato eseguito come bug di sistema verificato.
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=????????????????
In questo caso fffff80240d322f9
si trova nel registro del puntatore dell'istruzione, rip.
Il !pte
comando e !pool
può essere usato anche per esaminare la memoria.
Usare !memusage
e per esaminare lo stato generale della memoria di sistema.
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.
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 rileva errori nell'esecuzione del codice del driver, crea in modo proattivo un'eccezione per consentire l'ulteriore analisi di tale parte del codice driver. Gestione verifica driver è integrato in Windows ed è disponibile in tutti i PC Windows. Usare Driver Verifier per rilevare la causa specifica di un errore.
Per avviare gestione verifica driver, digitare 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 possibile di driver. Se è stato identificato un driver con errori, selezionarlo. Per altre informazioni, vedere Driver Verifier.