Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
[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 di un oggetto transazione DMA che specifica la transazione da modificare.
[in] Offset
Offset del registro, dal DeviceAddress specificato in WDF_DMA_SYSTEM_PROFILE_CONFIG, a o da cui eseguire DMA.
Valore restituito
Nessuno
Osservazioni:
WdfDmaTransactionSetDeviceAddressOffset deve essere usato con un enabler 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 potrebbe 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 registrazione del dispositivo durante la configurazione dell'abilitatore 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.
Esempi
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 minima di KMDF | 1.11 |
intestazione | wdfdmatransaction.h (include Wdf.h) |
Biblioteca | Wdf01000.sys (vedere Controllo delle versioni della libreria framework). |
IRQL | <=DISPATCH_LEVEL |
regole di conformità DDI | DriverCreate(kmdf) |