Partilhar via


Reutilizando objetos de transação DMA

[Aplica-se apenas ao KMDF]

Depois que um driver processa todas as transferências DMA associadas a uma transação 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 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 estão 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 as alças para esses objetos de transação.

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

  3. Se o driver usa um de seus objetos de transação armazenados, ele deve 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 reutilização chamando WdfDmaTransactionRelease em vez de WdfObjectDelete.

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