Funzione WdfDmaTransactionDmaCompletedFinal (wdfdmatransaction.h)
[Si applica solo a KMDF]
Il metodo WdfDmaTransactionDmaCompletedFinal notifica al framework che l'operazione di trasferimento DMA di un dispositivo è stata completata con una condizione di sottorun e fornisce la lunghezza del trasferimento completato.
Sintassi
BOOLEAN WdfDmaTransactionDmaCompletedFinal(
[in] WDFDMATRANSACTION DmaTransaction,
[in] size_t FinalTransferredLength,
[out] NTSTATUS *Status
);
Parametri
[in] DmaTransaction
Handle a un oggetto transazione DMA ottenuto dal driver da una chiamata precedente a WdfDmaTransactionCreate.
[in] FinalTransferredLength
Numero di byte trasferiti dal dispositivo.
[out] Status
Puntatore a una posizione che riceve lo stato del trasferimento DMA. Per altre informazioni, vedere la sezione Osservazioni per WdfDmaTransactionDmaCompleted.
Valore restituito
WdfDmaTransactionDmaCompletedFinal restituisce FALSE se il driver fornisce un parametro di input non valido. In caso contrario, WdfDmaTransactionDmaCompletedFinal restituisce sempre TRUE, che indica che il framework non tenterà di trasferire più byte per la transazione DMA specificata dal parametro DmaTransaction .
Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.
Commenti
Un driver chiama in genere WdfDmaTransactionDmaCompletedFinal dall'interno del callback EvtInterruptDpc . Un driver per un dispositivo DMA in modalità sistema potrebbe chiamare la funzione di callback dell'evento WdfDmaTransactionDmaCompletedFinal dall'interno di una funzione di callback dell'evento EvtDmaTransactionDmaTransferComplete .
Nell'esempio PLX9x5x il driver chiama WdfDmaTransactionDmaCompletedFinal dalla sua funzione di callback EvtProgramDma .
Il metodo WdfDmaTransactionDmaCompletedFinal si comporta come WdfDmaTransactionDmaCompleted, ad eccezione del fatto che i driver in genere chiamano WdfDmaTransactionDmaCompletedFinal se l'hardware segnala una condizione di sottorun. Una condizione di sottorun significa che l'hardware non è riuscito a trasferire tutti i byte specificati per l'ultimo trasferimento DMA. Una chiamata a WdfDmaTransactionDmaCompletedFinal impedisce al framework di avviare altri trasferimenti DMA per la transazione DMA specificata.
Quando il driver chiama WdfDmaTransactionDmaCompletedFinal, il driver fornisce il numero di byte trasferiti. Il valore restituito è sempre TRUE, perché il framework non tenterà di trasferire più byte per la transazione specificata.
Per altre informazioni sul completamento dei trasferimenti DMA, vedere Completamento di un trasferimento DMA.
Esempio
Nell'esempio di codice seguente viene notificato al framework che l'operazione di trasferimento DMA di un dispositivo è stata completata con una condizione di sottorun.
BOOLEAN success;
NTSTATUS status;
success = WdfDmaTransactionDmaCompletedFinal(
DmaTransaction,
transferLength,
&status
);
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.0 |
Intestazione | wdfdmatransaction.h (include Wdf.h) |
Libreria | Wdf01000.sys (vedere Framework Library Versioning). |
IRQL | <=DISPATCH_LEVEL |
Regole di conformità DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |