Partager via


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
Pour plus d’informations sur les types de transfert pour les codes de contrôle d’E/S, consultez Définition des codes de contrôle d’E/S.

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)

Voir aussi

EvtProgramDma

WDF_DMA_DIRECTION

WdfDmaEnablerSetMaximumScatterGatherElements

WdfDmaTransactionCreate

WdfDmaTransactionExecute

WdfDmaTransactionInitialize