Condividi tramite


Funzione WdfDmaTransactionInitializeUsingRequest (wdfdmatransaction.h)

[Si applica solo a KMDF]

Il metodo WdfDmaTransactionInitializeUsingRequest inizializza una transazione DMA specificata utilizzando i parametri di una richiesta di I/O specificata.

Sintassi

NTSTATUS WdfDmaTransactionInitializeUsingRequest(
  [in] WDFDMATRANSACTION   DmaTransaction,
  [in] WDFREQUEST          Request,
  [in] PFN_WDF_PROGRAM_DMA EvtProgramDmaFunction,
  [in] WDF_DMA_DIRECTION   DmaDirection
);

Parametri

[in] DmaTransaction

Handle per un oggetto transazione DMA ottenuto dal driver da una chiamata precedente a WdfDmaTransactionCreate.

[in] Request

Handle per un oggetto richiesta framework.

[in] EvtProgramDmaFunction

Puntatore alla funzione di callback degli eventi evtProgramDma del driver.

[in] DmaDirection

Valore WDF_DMA_DIRECTION-typed che specifica la direzione del trasferimento DMA.

Valore restituito

WdfDmaTransactionInitializeUsingRequest restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, il metodo potrebbe restituire uno dei valori descritti nella sezione Valori restituiti di WdfDmaTransactionInitialize.

Questo metodo potrebbe anche restituire altri valori NTSTATUS .

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Osservazioni:

Il metodo WdfDmaTransactionInitializeUsingRequest prepara un'operazione DMA per l'esecuzione, eseguendo operazioni di inizializzazione come la configurazione dell'elenco di dispersione/raccolta di una transazione. Dopo che il driver chiama WdfDmaTransactionInitializeUsingRequest, il driver deve chiamare WdfDmaTransactionExecute.

Il driver può chiamare WdfRequestGetParameters per ottenere il tipo di una richiesta. Il valore specificato dal driver per il parametro DmaDirection deve essere appropriato per il tipo di richiesta, come indicato di seguito:

  • Il valore DmaDirection deve essere WdfDmaDirectionReadFromDevice se:
    • Il tipo di richiesta è WdfRequestTypeRead
    • Il tipo di richiesta è WdfRequestTypeDeviceControl o WdfRequestTypeDeviceControlInternal e il codice di controllo I/O specifica un tipo di trasferimento di METHOD_OUT_DIRECT
  • Il valore DmaDirection deve essere WdfDmaDirectionWriteToDevice se:
    • Il tipo di richiesta è WdfRequestTypeWrite
    • Il tipo di richiesta è WdfRequestTypeDeviceControl o WdfRequestTypeDeviceControlInternal e il codice di controllo I/O specifica un tipo di trasferimento di METHOD_IN_DIRECT
Per altre informazioni sui tipi di trasferimento per i codici di controllo di I/O, vedere Definizione di codici di controllo di I/O.

I driver basati su framework chiamano in genere WdfDmaTransactionInitializeUsingRequest dall'interno di una funzione di callback dell'evento di accodamento I/O .

Il driver deve chiamare WdfDmaTransactionInitializeUsingRequest se si sta creando una transazione DMA basata su informazioni contenute in un oggetto richiesta framework. Utilizzare WdfDmaTransactionInitialize se si sta creando una transazione DMA non basata su un oggetto richiesta.

Se il buffer descritto dall'oggetto richiesta è maggiore della lunghezza massima di trasferimento specificata dal driver quando viene chiamato WdfDmaEnablerCreate o WdfDmaTransactionSetMaximumLength, il framework suddivide la transazione in più trasferimenti .

Per altre informazioni sulle transazioni DMA, vedere Creazione e inizializzazione di una transazione DMA.

Esempi

Per un esempio di codice che usa WdfDmaTransactionInitializeUsingRequest, vedere WdfDmaTransactionExecute.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
versione minima di KMDF 1.0
intestazione wdfdmatransaction.h (include Wdf.h)
Biblioteca Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL <=DISPATCH_LEVEL
regole di conformità DDI DeferredRequestCompleted(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf)

Vedere anche

EvtProgramDma

WDF_DMA_DIRECTION

WdfDmaEnablerSetMaximumScatterGatherElements

WdfDmaTransactionCreare

WdfDmaTransactionExecute

WdfDmaTransactionInitialize