Função WdfDmaTransactionAllocateResources (wdfdmatransaction.h)
[Aplica-se somente ao KMDF]
O método WdfDmaTransactionAllocateResources reserva um habilitador de DMA de modo de sistema ou de pacote único para uso exclusivo (e repetido) com o objeto de transação especificado. O driver pode inicializar e iniciar a transação várias vezes enquanto mantém recursos reservados.
Sintaxe
NTSTATUS WdfDmaTransactionAllocateResources(
[in] WDFDMATRANSACTION DmaTransaction,
[in] WDF_DMA_DIRECTION DmaDirection,
[in] ULONG RequiredMapRegisters,
[in] PFN_WDF_RESERVE_DMA EvtReserveDmaFunction,
[in] PVOID EvtReserveDmaContext
);
Parâmetros
[in] DmaTransaction
Um identificador para o objeto de transação DMA para o qual os recursos de DMA devem ser reservados.
[in] DmaDirection
Um valor de tipo WDF_DMA_DIRECTION especificando a direção de transferência de DMA para a qual os recursos estão sendo reservados. Se o driver não especificou um perfil duplex, a estrutura ignorará esse valor.
[in] RequiredMapRegisters
O número de registros de mapa que o driver deseja reservar. Se zero, a estrutura deriva o número necessário de registros de mapa da transação inicializada.
[in] EvtReserveDmaFunction
Um ponteiro para a função de retorno de chamada de evento EvtReserveDma do driver.
[in] EvtReserveDmaContext
Um ponteiro para um buffer que contém o contexto a ser fornecido à função de retorno de chamada de evento EvtReserveDma do driver.
Retornar valor
WdfDmaTransactionAllocateResources retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método retornará um dos valores a seguir.
Código de retorno | Descrição |
---|---|
|
O parâmetro DmaDirection contém um valor inválido. |
|
O número de solicitações de registro de mapa excede o número atribuído ao habilitador ou o driver anteriormente chamado WdfDmaTransactionSetImmediateExecution e os recursos necessários para a solicitação não estão disponíveis. |
|
O DMA versão 3 ou posterior não está habilitado ou o driver chamou esse método para um habilitador de DMA de coleta de dispersão. |
Comentários
WdfDmaTransactionAllocateResources envia uma solicitação para registros de mapa para o mecanismo de DMA do sistema. Quando a solicitação for atendida, a estrutura chamará a função de retorno de chamada de evento EvtReserveDma do driver. Para obter mais informações sobre a reserva de recursos, consulte Reservando recursos de DMA.
Os drivers baseados em estrutura normalmente chamam WdfDmaTransactionAllocateResources de dentro de um manipulador de solicitação de E/S. Um driver também pode chamar WdfDmaTransactionAllocateResources de sua função de retorno de chamada EvtDriverDeviceAdd , depois de criar um objeto de habilitador de DMA.
Quando chamado com um habilitador de DMA de dispersão/coleta, WdfDmaTransactionAllocateResources causa um bug verificador marcar.
O driver deve criar a transação especificada por DmaTransaction antes de chamar WdfDmaTransactionAllocateResources. Depois de chamar WdfDmaTransactionAllocateResources, o driver inicializa e inicia a transação. O driver pode reinicializar e reinicializar o mesmo objeto de transação várias vezes, evitando o atraso que, de outra forma, ocorreria entre transações, pois os registros de mapa eram liberados de volta para o HAL e depois realocados.
Um driver pode chamar WdfDmaTransactionAllocateResources nas seguintes situações:
- O driver recebe um conjunto de canais DMA em sua função de retorno de chamada EvtDevicePrepareHardware . No EvtDevicePrepareHardware, o driver inicializa uma transação de DMA e chama WdfDmaTransactionAllocateResources para reservar o habilitador para uso exclusivo com essa transação. Como alternativa, o driver pode chamar WdfDmaTransactionAllocateResources de um manipulador de solicitação e, em seguida, iniciar a transação várias vezes.
- O driver precisa executar uma série de transações no habilitador. O driver reserva o habilitador, inicializa e inicia várias transações usando o mesmo objeto de transação e libera o habilitador.
Ao chamar WdfDmaTransactionAllocateResources, o driver não deve solicitar mais registros de mapa do que o solicitado quando criou o habilitador.
Para chamar WdfDmaTransactionAllocateResources de maneira não bloqueada, o driver deve primeiro chamar WdfDmaTransactionSetImmediateExecution.
WdfDmaTransactionAllocateResources requer dma versão 3. Para selecionar o DMA versão 3, defina o membro WdmDmaVersionOverride de WDF_DMA_ENABLER_CONFIG como 3.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.11 |
Cabeçalho | wdfdmatransaction.h (include Wdf.h) |
Biblioteca | Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.) |
IRQL | <=DISPATCH_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf) |