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:
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.
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.
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.