Gravando rotinas adapterControl

A maioria dos drivers de dispositivos DMA tem uma rotina AdapterControl , que é responsável por iniciar operações de DMA. (Os drivers que não exigem rotinas AdapterControl incluem aqueles que usam DMA de dispersão/coleta e aqueles que usam DMA de buffer comum master barramento.)

Quando um driver chama AllocateAdapterChannel, sua rotina AdapterControl é executada imediatamente se o controlador DMA do sistema ou o adaptador master de barramento estiver disponível para uma operação de DMA e se houver registros de mapa suficientes disponíveis. Caso contrário, a rotina AdapterControl será enfileirada até que esses recursos estejam disponíveis.

Se a rotina AdapterControl do driver retornar KeepObject ou DeallocateObjectKeepRegisters (mantendo assim o canal do controlador DMA do sistema ou o adaptador de barramento master para operações de transferência adicionais), a rotina DpcForIsr ou CustomDpc do driver será responsável por liberar o objeto adaptador ou registros de mapa chamando FreeAdapterChannel ou FreeMapRegisters antes que a rotina DPC conclua o IRP atual e retorne o controle .