Partager via


WdfDmaTransactionSetDeviceAddressOffset, fonction (wdfdmatransaction.h)

[S’applique à KMDF uniquement]

La méthode WdfDmaTransactionSetDeviceAddressOffset spécifie le décalage du registre auquel le contrôleur DMA système accède lors de l’exécution de l’opération DMA.

Syntaxe

void WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

Paramètres

[in] DmaTransaction

Handle vers un objet de transaction DMA qui spécifie la transaction à modifier.

[in] Offset

Décalage du registre, à partir de l’adresse DeviceAddress spécifiée dans WDF_DMA_SYSTEM_PROFILE_CONFIG, vers ou à partir duquel DMA doit être effectué.

Valeur de retour

None

Remarques

WdfDmaTransactionSetDeviceAddressOffset doit être utilisé avec un enabler DMA qui spécifie un profil DMA en mode système.

Les pilotes basés sur l’infrastructure appellent WdfDmaTransactionSetDeviceAddressOffset après avoir initialisé une transaction DMA et avant de l’exécuter.

Un pilote peut utiliser cette méthode pour accéder à plusieurs registres dans le fichier de registre d’un appareil.

Par exemple, un pilote peut utiliser DMA pour accéder à des registres de lecture et d’écriture distincts dans le fichier de registre d’un appareil.

Pour ce faire, le pilote spécifie l’adresse de base du fichier de registre de l’appareil lors de la configuration de l’enabler, puis définit le décalage du registre de lecture ou d’écriture si nécessaire avant d’exécuter la transaction.

Si votre pilote appelle cette méthode sur un système d’exploitation avant Windows 8, le vérificateur de l’infrastructure signale une erreur.

Exemples

L’exemple de code suivant initialise une transaction DMA. Il définit ensuite le décalage du registre auquel le contrôleur DMA système accède, fournit une routine de rappel de fin de transfert et exécute la transaction DMA.

status = WdfDmaTransactionInitialize(
                                     RequestContext->DmaTransaction,
                                     EvtProgramDma,
                                     direction,
                                     mdl,
                                     startingVa,
                                     length
                                     );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

WdfDmaTransactionSetDeviceAddressOffset(
                                        RequestContext->DmaTransaction,
                                        READ_DATA_REGISTER_OFFSET
                                        );

WdfDmaTransactionSetTransferCompleteCallback(
                                             RequestContext->DmaTransaction,
                                             EvtDmaTransactionDmaTransferComplete,
                                             RequestContext
                                             );

status = WdfDmaTransactionExecute(
                                  RequestContext->DmaTransaction, 
                                  RequestContext );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

return status;

Complete:

WdfDmaTransactionRelease(
                         RequestContext->DmaTransaction
                         );

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8
Plateforme cible Universal
Version KMDF minimale 1.11
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)

Voir aussi

WDF_DMA_SYSTEM_PROFILE_CONFIG