Controllo bug 0xE6: DRIVER_VERIFIER_DMA_VIOLATION
Il controllo DRIVER_VERIFIER_DMA_VIOLATION bug ha un valore di 0x000000E6. Si tratta del codice di controllo dei bug per tutte le violazioni di verifica DMA del driver.
Importante
Questo articolo è destinato ai programmatori. Se si è un cliente che ha ricevuto un codice di errore dello schermo blu durante l'uso del computer, vedere Risolvere gli errori dello schermo blu.
Nota
Il codice di controllo dei bug principale E6 può essere osservato quando il driver verifier non è abilitato. Per altre informazioni, vedere la pagina Verifica DMA se si verifica questo codice senza Driver Verifier abilitato.
parametri DRIVER_VERIFIER_DMA_VIOLATION
Il parametro 1 è l'unico parametro di interesse. Questo parametro identifica la violazione esatta. Se un debugger è collegato, viene visualizzato un messaggio informativo nel debugger.
Parametro 1 | Causa di errore e messaggio debugger |
---|---|
0x00 - Errore DMA varie. |
Questo codice può rappresentare due tipi di errori, come indicato dal parametro 2: 0x1 : il driver ha tentato di scaricare troppi byte alla fine del file di registrazione della mappa. Parametro 3: numero di byte lasciati nel MDL. Parametro 4: numero di byte lasciati da scaricare. 0x2 : Windows ha esaurito i registri delle mappe contigue. Parametro 3 : registrare le mappe necessarie. Parametro 4: numero di registri mappa contigui. |
0x01 |
Il contatore delle prestazioni è diminuito. Vengono visualizzati i valori precedenti e nuovi del contatore. |
0x02 |
Il contatore delle prestazioni è aumentato troppo velocemente. Il valore del contatore viene visualizzato nel debugger. |
0x03 |
Il driver ha liberato troppi buffer comuni DMA. In genere ciò significa che ha liberato lo stesso buffer due volte. Parametro 2 - Numero di buffer comuni aggiuntivi liberati. |
0x04 |
Il driver ha liberato troppi canali adattatori DMA. In genere questo significa che liberava lo stesso canale di adattatore due volte. Parametro 2 - Numero di canali di adattatore aggiuntivi liberati. |
0x05 |
Il driver ha liberato troppi registri della mappa DMA. In genere ciò significa che ha liberato lo stesso registro mappa due volte. Parametro 2 - Numero di registri mappa aggiuntivi liberati. |
0x06 |
Il driver ha liberato troppi elenchi di dispersione/raccolta DMA. In genere ciò significa che liberava la stessa lista di dispersione/raccolta due volte. Parametro 2 : elenchi di raccolta a dispersione allocati. Parametro 3: elenchi di raccolta a dispersione liberati. |
0x07 |
Il driver ha provato a rilasciare l'adattatore senza prima liberare tutti i buffer comuni. Parametro 2 : puntatore alla scheda DMA. Parametro 3: numero di buffer comuni in sospeso. Parametro 4: puntatore ai dati del verificatore interno corrispondente. |
0x08 |
Il driver ha tentato di rilasciare la scheda senza prima liberare tutti i canali di adattatore, i buffer comuni o gli elenchi di dispersione/raccolta.
Parametro 2 : puntatore alla scheda DMA. Parametro 3: numero di canali di adattatore in sospeso. Parametro 4: puntatore ai dati del verificatore interno corrispondente. |
0x09 |
Il driver ha tentato di rilasciare l'adattatore senza prima liberare tutti i registri della mappa. Parametro 2 : puntatore alla scheda DMA. Parametro 3: numero di registri mappa in sospeso. Parametro 4: puntatore ai dati del verificatore interno corrispondente. |
0x0A |
Il driver ha tentato di rilasciare l'adattatore senza prima liberare tutti gli elenchi di dispersione/raccolta. Parametro 2 : puntatore alla scheda DMA. Parametro 3: numero di elenchi di raccolta a dispersione in sospeso. Parametro 4: puntatore ai dati del verificatore interno corrispondente. |
0x0B |
Il driver ha allocato troppi canali adattatori contemporaneamente (è consentito un solo canale adattatore per scheda). Parametro 2: canali adattatori in sospeso. |
0x0C |
Il driver ha cercato di allocare troppi registri mappa contemporaneamente. Parametro 2- Registri mappa necessari. Parametro 3 : registra la mappa massima. |
0x0d |
Il driver non ha scaricato i buffer dell'adattatore. Parametro 2 - Numero di byte mappati. Parametro 3: numero massimo di byte che possono essere mappati alla volta. |
0x0E |
Il driver ha provato un trasferimento DMA senza bloccare il buffer. Il buffer in questione era in memoria paginata. Parametro 2 : indirizzo del buffer DMA MDL. |
0x0F |
Il driver o l'hardware ha scritto all'esterno del buffer DMA allocato. Il parametro 2 è il codice di violazione. 0x01 : tag prima della modifica del buffer DMA. Il tag previsto è DmaVrfy0. Parametro 3 - Lunghezza buffer. Parametro 4 - Avvio buffer. 0x02 : tag dopo la modifica del buffer DMA. Il tag previsto è DmaVrfy0.Parametro 3 - Lunghezza buffer. Parametro 4 - Avvio buffer. 0x03 : il registro mappa gratuito è stato sovrascritto.Parametro 3 - Indirizzo danneggiamento. Il modello di riempimento previsto è 0x0F. 0x04 : riempimento prima della modifica errata del buffer.Parametro 3 - Avvio del buffer. La spaziatura interna prevista è 0x0F. Parametro 4 - Indirizzo danneggiamento. 0x05 : riempimento dopo la modifica errata del buffer.Parametro 3 - Avvio del buffer. Parametro 4 - Indirizzo danneggiamento. Il modello di riempimento previsto è 0x0F. |
0x10 |
Il driver ha cercato di liberare i registri della mappa mentre alcuni erano ancora mappati. Parametro 2 : numero di registri ancora mappati. |
0x11 |
Il driver ha un numero eccessivo di riferimenti in sospeso per l'adattatore. Parametro 2 - Numero di riferimenti. Parametro 3 : puntatore all'adattatore DMA. Parametro 4: puntatore ai dati del verificatore interno corrispondente. |
0x13 |
Il driver ha chiamato una routine DMA in un IRQL non corretto. Il parametro 2 è il codice di violazione. 0x01 : l'oggetto IRQL corrente è diverso da quello previsto.Parametro 3 : previsto IRQL. Parametro 4 - IrQL corrente. 0x02 : l'oggetto IRQL corrente è superiore al previsto.Parametro 3: previsto irQL massimo. Parametro 4 - IrQL corrente. |
0x14 |
Il driver ha chiamato una routine DMA in un IRQL non corretto. |
0x15 |
Il driver ha tentato di allocare troppi registri mappa. Parametro 2: registri mappa allocati. Parametro 3 : registra la mappa massima. |
0x16 |
Il driver ha tentato di scaricare un buffer non mappato. Parametro 2 : indirizzo nello spazio virtuale del sistema del registro mappa. Parametro 3: puntatore ai dati del verificatore interno corrispondente. |
0x18 |
Il driver ha provato un'operazione DMA usando una scheda già rilasciata e non esiste più. Parametro 2 : puntatore alla scheda DMA. Parametro 3: puntatore ai dati del verificatore interno corrispondente. |
0x19 |
Il driver ha passato un valore null DMA_ADAPTER a una routine HAL. |
0x1B |
Il driver ha passato un indirizzo e MDL a una routine HAL. Tuttavia, questo indirizzo non rientra nei limiti di questo MDL. Parametro 2: indirizzo virtuale non collegato a MDL. Parametro 3 - MDL. |
0x1D |
Il driver ha tentato di mappare un intervallo di indirizzi già mappato. Parametro 2 - Buffer per eseguire il mapping dell'avvio. Parametro 3: buffer per eseguire il mapping alla fine. Parametro 4 : indirizzo di sistema nel buffer già mappato. |
0x1E |
Il driver denominato HalGetAdapter. Questa funzione è obsoleta: è necessario usare invece IoGetDmaAdapter . |
0x1F |
Buffer DMA non valido. Il driver ha fatto riferimento a un indirizzo di sistema non valido, prima del primo MDL o dopo la fine del primo MDL oppure usando una lunghezza di trasferimento più lunga del buffer MDL e supera un limite di pagina all'interno del codice di violazione. 0x01 : l'indirizzo del buffer virtuale è prima del primo MDL. Parametro 3: indirizzo virtuale dell'inizio del buffer DMA. Parametro 4 : puntatore al primo MDL che descrive il buffer DMA. 0x02 : l'indirizzo virtuale è dopo il primo MDL. Parametro 3: indirizzo virtuale dell'inizio del buffer DMA. Parametro 4 : puntatore al primo MDL che descrive il buffer DMA. 0x03 : la lunghezza del trasferimento aggiuntivo supera un limite di pagina. Parametro 3: puntatore al MDL che descrive il buffer DMA. Parametro 4 : lunghezza del trasferimento DMA. 0x04 : l'indirizzo virtuale di un buffer DMA non è allineato alla cache. Parametro 3: indirizzo virtuale dell'inizio del buffer DMA. Parametro 4 : puntatore a MDL che descrive il buffer DMA. 0x05 : la lunghezza del buffer DMA non è allineata alla cache. Parametro 3 : lunghezza del buffer DMA. Parametro 4 : puntatore a MDL che descrive il buffer DMA. |
0x20 |
Il driver ha tentato di scaricare un registro mappa che non è stato mappato. Parametro 2 : mappare la base di registrazione. Parametro 3: va dell'inizio del buffer DMA. Parametro 4: puntatore al MDL usato per descrivere il buffer DMA. |
0x21 |
Il driver ha tentato di eseguire il mapping di un buffer a lunghezza zero per il trasferimento. Parametro 2: puntatore ai dati del verificatore interno corrispondente. |
0x22 |
Buffer DMA non mappato nel sistema VA. Parametro 2 - MDL |
0x23 |
Impossibile scaricare un canale che non è stato completato o annullato. Parametro 2 - Codice di violazione. Valore: 0x00 : scaricamento del canale non valido Parametro 3 - ID controller. Parametro 4 - Numero di canale. |
0x24 |
Buffer insufficiente per la lunghezza richiesta. Parametro 2 - Lunghezza non rilevata. |
0x25 |
Versione della descrizione del dispositivo sconosciuta. |
0x26 |
IOMMU ha rilevato la violazione DMA. Parametro 2 - Oggetto dispositivo del dispositivo di errore. Parametro 3 - Informazioni di errore (in genere errore di indirizzo fisico). Parametro 4 - Tipo di errore (specifico dell'hardware). |
Causa
Per una descrizione della causa, vedere la descrizione di ogni codice nella sezione Parametri.
Risoluzione
Questo controllo di bug può verificarsi solo quando è stato richiesto di monitorare uno o più driver. Se non si intende usare Driver Verifier, è consigliabile disattivarlo. È anche possibile rimuovere il driver che ha causato questo problema.
Se si è il writer del driver, usare le informazioni ottenute tramite questo controllo di bug per correggere i bug nel codice.
Per altre informazioni su Driver Verifier, vedere Driver Verifier.