Partager via


WdfDmaTransactionDmaCompletedFinal, fonction (wdfdmatransaction.h)

[S’applique à KMDF uniquement]

La méthode WdfDmaTransactionDmaCompletedFinal informe l’infrastructure que l’opération de transfert DMA d’un appareil s’est terminée avec une condition de sous-exécution et fournit la durée du transfert terminé.

Syntaxe

BOOLEAN WdfDmaTransactionDmaCompletedFinal(
  [in]  WDFDMATRANSACTION DmaTransaction,
  [in]  size_t            FinalTransferredLength,
  [out] NTSTATUS          *Status
);

Paramètres

[in] DmaTransaction

Handle pour un objet de transaction DMA que le pilote a obtenu à partir d’un appel précédent à WdfDmaTransactionCreate.

[in] FinalTransferredLength

Nombre d’octets transférés par l’appareil.

[out] Status

Pointeur vers un emplacement qui reçoit le status du transfert DMA. Pour plus d’informations, consultez la section Notes pour WdfDmaTransactionDmaCompleted.

Valeur retournée

WdfDmaTransactionDmaCompletedFinal retourne FALSE si le pilote fournit un paramètre d’entrée non valide. Sinon, WdfDmaTransactionDmaCompletedFinal retourne toujours TRUE, ce qui indique que le framework n’essaiera pas de transférer plus d’octets pour la transaction DMA que le paramètre DmaTransaction a spécifié.

Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.

Remarques

Un pilote appelle généralement WdfDmaTransactionDmaCompletedFinal à partir de son rappel EvtInterruptDpc . Un pilote pour un appareil DMA en mode système peut appeler WdfDmaTransactionDmaCompletedFinal à partir d’une fonction de rappel d’événement EvtDmaTransactionDmaTransferComplete .

Dans l’exemple PLX9x5x , le pilote appelle WdfDmaTransactionDmaCompletedFinal à partir de sa fonction de rappel EvtProgramDma .

La méthode WdfDmaTransactionDmaCompletedFinal se comporte comme WdfDmaTransactionDmaCompleted, sauf que les pilotes appellent généralement WdfDmaTransactionDmaCompletedFinal si le matériel signale une condition de sous-exécution. Une condition de sous-exécution signifie que le matériel n’a pas pu transférer tous les octets spécifiés pour le dernier transfert DMA. Un appel à WdfDmaTransactionDmaCompletedFinal empêche l’infrastructure de démarrer d’autres transferts DMA pour la transaction DMA spécifiée.

Lorsque votre pilote appelle WdfDmaTransactionDmaCompletedFinal, le pilote fournit le nombre d’octets qui ont été transférés. La valeur de retour est toujours TRUE, car l’infrastructure ne tente pas de transférer d’octets supplémentaires pour la transaction spécifiée.

Pour plus d’informations sur l’exécution des transferts DMA, consultez Achèvement d’un transfert DMA.

Exemples

L’exemple de code suivant avertit l’infrastructure que l’opération de transfert DMA d’un appareil s’est terminée avec une condition de sous-exécution.

BOOLEAN  success;
NTSTATUS  status;

success = WdfDmaTransactionDmaCompletedFinal(
                                             DmaTransaction,
                                             transferLength,
                                             &status
                                             );

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
En-tête wdfdmatransaction.h (inclure Wdf.h)
Bibliothèque Wdf01000.sys (consultez Gestion des versions de la bibliothèque d’infrastructure).)
IRQL <=DISPATCH_LEVEL
Règles de conformité DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Voir aussi

WdfDmaTransactionCreate

WdfDmaTransactionDmaCompleted

WdfDmaTransactionDmaCompletedWithLength