Reutilizando objetos de transação DMA

[Aplica-se somente ao KMDF]

Depois que um driver processa todas as transferências de DMA associadas a uma transação de DMA, o driver pode excluir ou reutilizar o objeto de transação. Normalmente, a função de retorno de chamada EvtInterruptDpc do driver exclui o objeto de transação (chamando WdfObjectDelete). Posteriormente, quando o driver cria uma nova transação de DMA, ele chama WdfDmaTransactionCreate para criar um novo objeto de transação.

No entanto, às vezes, é benéfico para o driver reutilizar objetos de transação. Nesses casos, o driver chama WdfDmaTransactionRelease em vez de WdfObjectDelete.

Por exemplo, suponha que o driver e o dispositivo devem operar quando os recursos de memória do computador estiverem baixos. Para lidar com esse problema de memória, o driver pode usar o seguinte procedimento:

  1. A função de retorno de chamada EvtDriverDeviceAdd do driver pode chamar WdfDmaTransactionCreate para criar um ou mais objetos de transação. O driver salva os identificadores nesses objetos de transação.

  2. Sempre que o driver estiver pronto para criar e inicializar uma nova transação, ele chamará WdfDmaTransactionCreate. Se esse método retornar STATUS_INSUFFICIENT_RESOURCES, o driver poderá usar um dos objetos de transação armazenados.

  3. Se o driver usar um de seus objetos de transação armazenados, ele deverá reutilizar o objeto de transação, em vez de excluí-lo, quando a transação for concluída. O driver configura o objeto de transação para reutilizar chamando WdfDmaTransactionRelease em vez de WdfObjectDelete.

O exemplo PLX9x5x reutiliza objetos de transação DMA.