Condividi tramite


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)

Vedi anche

WdfDmaTransactionCreate

WdfDmaTransactionDmaCompleted

WdfDmaTransactionDmaCompletedWithLength