Compartilhar via


Função WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)

[Aplica-se somente ao KMDF]

O método WdfDmaTransactionSetDeviceAddressOffset especifica o deslocamento do registro que o controlador DMA do sistema acessará ao executar a operação DMA.

Sintaxe

VOID WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

Parâmetros

[in] DmaTransaction

Um identificador para um objeto de transação DMA que especifica a transação a ser modificada.

[in] Offset

O deslocamento do registro, do DeviceAddress especificado em WDF_DMA_SYSTEM_PROFILE_CONFIG, para ou do qual o DMA deve ser executado.

Valor de retorno

Nenhum

Observações

WdfDmaTransactionSetDeviceAddressOffset deve ser usada com um habilitador de DMA que especifica um perfil DMA no modo sistema.

Os drivers baseados em estrutura chamam WdfDmaTransactionSetDeviceAddressOffset depois de inicializar uma transação DMA e antes de executá-la.

Um driver pode usar esse método para acessar vários registros no arquivo de registro de um dispositivo.

Por exemplo, um driver pode usar o DMA para acessar registros de leitura e gravação separados no arquivo de registro de um dispositivo.

Para fazer isso, o driver especifica o endereço base do arquivo de registro do dispositivo ao configurar o habilitador e define o deslocamento do registro de leitura ou gravação conforme necessário antes de executar a transação.

Se o driver chamar esse método em um sistema operacional anterior ao Windows 8, o verificador da estrutura relatará um erro.

Exemplos

O exemplo de código a seguir inicializa uma transação DMA. Em seguida, ele define o deslocamento do registro que o controlador DMA do sistema acessará, fornece uma rotina de retorno de chamada de conclusão de transferência e executa a transação 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
                         );

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 8
da Plataforma de Destino Universal
versão mínima do KMDF 1.11
cabeçalho wdfdmatransaction.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (consulte o Controle de Versão da Biblioteca da Estrutura.)
IRQL <=DISPATCH_LEVEL
regras de conformidade de DDI DriverCreate(kmdf)

Consulte também

WDF_DMA_SYSTEM_PROFILE_CONFIG