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 per 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 altri byte per la transazione DMA specificata dal parametro DmaTransaction.

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Osservazioni:

Un driver chiama in genere WdfDmaTransactionDmaCompletedFinal dall'interno del EvtInterruptDpc callback. Un driver per un dispositivo DMA in modalità sistema potrebbe chiamare WdfDmaTransactionDmaCompletedFinal dall'interno di un EvtDmaTransactionDmaTransferComplete funzione di callback degli eventi.

Nell'esempio di PLX9x5x, il driver chiama WdfDmaTransactionDmaCompletedFinal dal relativo EvtProgramDma funzione di callback.

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 indica 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 altri byte per la transazione specificata.

Per altre informazioni sul completamento dei trasferimenti DMA, vedere Completamento di un trasferimento DMA.

Esempi

L'esempio di codice seguente notifica 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 minima di KMDF 1.0
intestazione wdfdmatransaction.h (include Wdf.h)
Biblioteca Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL <=DISPATCH_LEVEL
regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedere anche

WdfDmaTransactionCreare

WdfDmaTransactionDmaCompleted

WdfDmaTransactionDmaCompletedWithLength