WdfDmaTransactionInitializeUsingRequest, fonction (wdfdmatransaction.h)
[S’applique uniquement à KMDF]
La méthode WdfDmaTransactionInitializeUsingRequest initialise une transaction DMA spécifiée à l’aide des paramètres d’une requête d’E/S spécifiée.
Syntaxe
NTSTATUS WdfDmaTransactionInitializeUsingRequest(
[in] WDFDMATRANSACTION DmaTransaction,
[in] WDFREQUEST Request,
[in] PFN_WDF_PROGRAM_DMA EvtProgramDmaFunction,
[in] WDF_DMA_DIRECTION DmaDirection
);
Paramètres
[in] DmaTransaction
Handle vers un objet de transaction DMA que le pilote a obtenu à partir d’un appel précédent à WdfDmaTransactionCreate.
[in] Request
Handle vers un objet de requête de framework.
[in] EvtProgramDmaFunction
Pointeur vers la fonction de rappel d’événement evtProgramDma du pilote.
[in] DmaDirection
Valeur WDF_DMA_DIRECTION-typée qui spécifie la direction du transfert DMA.
Valeur de retour
WdfDmaTransactionInitializeUsingRequest retourne STATUS_SUCCESS si l’opération réussit. Sinon, la méthode peut renvoyer l’une des valeurs décrites dans la section Retour des valeurs de WdfDmaTransactionInitialize.
Cette méthode peut également retourner d’autres valeurs NTSTATUS .
Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.
Remarques
La méthode WdfDmaTransactionInitializeUsingRequest prépare une opération DMA pour l’exécution, en effectuant des opérations d’initialisation telles que la configuration de la liste de points/regroupement d’une transaction. Une fois que votre pilote appelle WdfDmaTransactionInitializeUsingRequest, le pilote doit appeler WdfDmaTransactionExecute.
Le pilote peut appeler WdfRequestGetParameters pour obtenir le type d’une requête. La valeur spécifiée par le pilote pour le paramètre DmaDirection doit être appropriée pour le type de requête, comme suit :
- La valeur DmaDirection doit être WdfDmaDirectionReadFromDevice si :
- Le type de requête est WdfRequestTypeRead
- Le type de requête est WdfRequestTypeDeviceControl ou WdfRequestTypeDeviceControlInternal et le code de contrôle d’E/S spécifie un type de transfert de METHOD_OUT_DIRECT
-
La valeur DmaDirection doit être WdfDmaDirectionWriteToDevice si :
- Le type de requête est WdfRequestTypeWrite
- Le type de requête est WdfRequestTypeDeviceControl ou WdfRequestTypeDeviceControlInternal et le code de contrôle d’E/S spécifie un type de transfert de METHOD_IN_DIRECT
Les pilotes basés sur l’infrastructure appellent généralement WdfDmaTransactionInitializeUsingRequest à partir d’une fonction de rappel d’événements d’E/S .
Votre pilote doit appeler WdfDmaTransactionInitializeUsingRequest si vous créez une transaction DMA basée sur les informations qu’un objet de demande de framework contient. Utilisez WdfDmaTransactionInitialize si vous créez une transaction DMA qui n’est pas basée sur un objet de requête.
Si la mémoire tampon décrite par l’objet de requête est supérieure à la longueur de transfert maximale spécifiée par votre pilote lorsqu’il a appelé WdfDmaEnablerCreate ou WdfDmaTransactionSetMaximumLength, l’infrastructure interrompt la transaction en plusieurs transferts .
Pour plus d’informations sur les transactions DMA, consultez Création et initialisation d’une transaction DMA.
Exemples
Pour obtenir un exemple de code qui utilise WdfDmaTransactionInitializeUsingRequest, consultez WdfDmaTransactionExecute.
Spécifications
Besoin | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.0 |
En-tête | wdfdmatransaction.h (include Wdf.h) |
Bibliothèque | Wdf01000.sys (voir Versioning de la bibliothèque Framework.) |
IRQL | <=DISPATCH_LEVEL |
règles de conformité DDI | DeferredRequestCompleted(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), Km, KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf) |