Condividi tramite


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.