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