Condividi tramite


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

Vedere anche

WDF_DMA_SYSTEM_PROFILE_CONFIG