Scrittura di routine AdapterControl
La maggior parte dei driver dei dispositivi DMA ha una routine AdapterControl , responsabile dell'avvio delle operazioni DMA. I driver che non richiedono routine AdapterControl includono quelli che usano DMA a dispersione/raccolta e quelli che usano common-buffer, bus-master DMA.
Quando un driver chiama AllocateAdapterChannel, la routine AdapterControl viene eseguita immediatamente se il controller DMA di sistema o l'adattatore bus-master è disponibile per un'operazione DMA e, se sono disponibili registri mappa sufficienti. In caso contrario, la routine AdapterControl viene accodata finché queste risorse non sono disponibili.
Se la routine AdapterControl del driver restituisce KeepObject o DeallocateObjectKeepRegisters (mantenendo il canale del controller DMA di sistema o l'adattatore master bus per operazioni di trasferimento aggiuntive), la routine DpcForIsr o CustomDpc del driver è responsabile del rilascio dell'oggetto adattatore o dei registri della mappa chiamando FreeAdapterChannel o FreeMapRegisters prima che la routine DPC completi l'IRP corrente e restituisca il controllo.