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

Vedi anche

WDF_DMA_SYSTEM_PROFILE_CONFIG