Condividi tramite


0xA di controllo dei bug: IRQL_NOT_LESS_OR_EQUAL

Il controllo dei bug IRQL_NOT_LESS_OR_EQUAL ha un valore pari a 0x0000000A. Questo controllo di bug indica che Microsoft Windows o un driver in modalità kernel ha eseguito l'accesso alla memoria di paging a un indirizzo non valido mentre a livello di richiesta di interrupt generato (IRQL). La causa è in genere un puntatore non valido o un problema di paging.

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 IRQL_NOT_LESS_OR_EQUAL

Parametro Descrizione
1 Indirizzo di memoria virtuale a cui non è possibile accedere.

Usare !pool in questo indirizzo per verificare se si tratta di un pool di paging. Altri comandi che potrebbero essere utili per raccogliere informazioni sull'errore sono !pte, !address e ln (List Nearest Symbols).
2 IRQL al momento dell'errore.

Valori:
2 - IrQL è stato DISPATCH_LEVEL al momento dell'errore.
3 Campo bit che descrive l'operazione che ha causato l'errore. Si noti che il bit 3 è disponibile solo nei chipset che supportano questo livello di report.

Valori di bit 0:
0 - Operazione di lettura
1 - Operazione di scrittura

Valori di bit 3:
0 - Non è un'operazione di esecuzione
1 - Operazione di esecuzione

Valori combinati bit 0 e Bit 3:
0x0 - Errore durante il tentativo di lettura dall'indirizzo nel parametro 1
0x1 - Errore durante il tentativo di scrittura nell'indirizzo nel parametro 1
0x8 - Errore durante il tentativo di eseguire il codice dall'indirizzo nel parametro 1

Questo valore è causato da:
  • Chiamata di una funzione che non può essere chiamata in DISPATCH_LEVEL mentre è in DISPATCH_LEVEL.
  • Dimenticando di rilasciare uno spinlock.
  • Contrassegnare il codice come pageable quando non deve essere paging. Ad esempio, se il codice acquisisce uno spinlock o viene chiamato in una chiamata di procedura posticipata.
4 Puntatore all'istruzione al momento dell'errore.

Usare il comando ln (List Nearest Symbols) su questo indirizzo per visualizzare il nome della funzione.

Causa

Questo controllo dei bug è causato da driver di dispositivo in modalità kernel che usano indirizzi non corretti.

Questo controllo di bug indica che è stato effettuato un tentativo di accesso a un indirizzo non valido mentre a livello di richiesta di interrupt generato (IRQL). La causa è un puntatore di memoria non valido o un problema di paginabilità con il codice del driver di dispositivo.

Le linee guida generali che è possibile usare per classificare il tipo di errore di codifica che ha causato il controllo dei bug sono le seguenti:

  • Se il parametro 1 è minore di 0x1000, è probabile che il problema sia una dereferenziazione del puntatore NULL.

  • Se !pool segnala che il parametro 1 è un pool di paging (o altri tipi di memoria pageable), irQL è troppo elevato per accedere a questi dati. Eseguire in un runtime di integrazione inferiore o allocare i dati nel pool non di paging.

  • Se il parametro 3 indica che il controllo dei bug è stato un tentativo di eseguire codice di paging, IRQL è troppo elevato per chiamare questa funzione. Eseguire in un runtime di integrazione inferiore o non contrassegnare il codice come pageable.

  • Può trattarsi di un puntatore non valido causato dall'uso di un'inversione a bit o senza bit. Esaminare la validità del parametro 1 con !pte, !address e ln (elencare i simboli più vicini) .

Risoluzione

Se è disponibile un debugger del kernel, ottenere un'analisi dello stack. Per iniziare, eseguire l'estensione !analyze debugger per visualizzare informazioni sul controllo dei bug. L'estensione !analyze può essere utile per determinare la causa radice. Immettere quindi uno dei comandi k* (display stack backtrace) per visualizzare lo stack di chiamate.

Raccogliere informazioni

Esaminare il nome del driver se è stato elencato nella schermata blu.

Controllare il log di sistema Visualizzatore eventi per altri messaggi di errore che potrebbero aiutare a individuare il dispositivo o il driver che causa l'errore. Cercare gli errori critici nel log di sistema che si sono verificati nello stesso intervallo di tempo della schermata blu.

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, digitare verifica 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. Per altre informazioni, vedere Driver Verifier.

Il codice seguente illustra un esempio di debug:

kd> .bugcheck       [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000

kd> kb [Lists the stack trace.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> kv [Lists the trap frames.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
ErrCode = 00000000
00000000 ???????????????    [The current instruction pointer is NULL.]

kd> kb       [Gives the stack trace before the fault.]
ChildEBP RetAddr  Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0

Osservazioni:

L'errore che genera questo controllo dei bug si verifica in genere dopo l'installazione di un driver di dispositivo difettoso, un servizio di sistema o un BIOS.

Se si verifica un controllo dei bug 0xA durante l'aggiornamento a una versione più recente di Windows, l'errore potrebbe essere causato da un driver di dispositivo, un servizio di sistema, uno scanner di virus o uno strumento di backup non compatibile con la nuova versione.

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. Eseguire la diagnostica hardware fornita dal produttore del sistema. Per informazioni dettagliate su queste procedure, vedere il manuale del proprietario per il computer.

Risoluzione di un problema del servizio di sistema difettoso: disabilitare il servizio e verificare se in questo modo 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 verificare se in questo modo viene risolto l'errore. In caso affermativo, contattare il produttore del programma su un possibile aggiornamento.

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

Vedi anche

Informazioni di riferimento sul codice di controllo dei bug