Funzione WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)
[Si applica solo a KMDF]
Il metodo WdfDmaTransactionSetDeviceAddressOffset specifica l'offset del registro a cui accede il controller DMA di sistema durante l'esecuzione dell'operazione DMA.
Sintassi
void WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
Parametri
[in] DmaTransaction
Handle per un oggetto transazione DMA che specifica la transazione da modificare.
[in] Offset
Offset del registro, da DeviceAddress specificato in WDF_DMA_SYSTEM_PROFILE_CONFIG, a o da cui eseguire DMA.
Valore restituito
nessuno
Osservazioni
WdfDmaTransactionSetDeviceAddressOffset deve essere usato con un abilitatore DMA che specifica un profilo DMA in modalità sistema.
I driver basati su framework chiamano WdfDmaTransactionSetDeviceAddressOffset dopo l'inizializzazione di una transazione DMA e prima di eseguirla.
Un driver può usare questo metodo per accedere a più registri all'interno del file di registrazione di un dispositivo.
Ad esempio, un driver può usare DMA per accedere a registri di lettura e scrittura separati nel file di registrazione di un dispositivo.
A tale scopo, il driver specifica l'indirizzo di base del file di registro del dispositivo durante la configurazione dell'abilitazione e quindi imposta l'offset del registro di lettura o scrittura in base alle esigenze prima di eseguire la transazione.
Se il driver chiama questo metodo in un sistema operativo precedente a Windows 8, il verificatore del framework segnala un errore.
Esempio
Nell'esempio di codice seguente viene inizializzata una transazione DMA. Imposta quindi l'offset del registro a cui accede il controller DMA di sistema, fornisce una routine di callback di completamento del trasferimento ed esegue la transazione 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
);
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 |
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.11 |
Intestazione | wdfdmatransaction.h (include Wdf.h) |
Libreria | Wdf01000.sys (vedere Controllo delle versioni della libreria framework). |
IRQL | <=DISPATCH_LEVEL |
Regole di conformità DDI | DriverCreate(kmdf) |