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) |