Написание подпрограмм AdapterControl
Большинство драйверов устройств DMA имеют подпрограмму AdapterControl , которая отвечает за инициализацию операций DMA. (К драйверам, которые не требуются подпрограммы AdapterControl, относятся те, которые используют точечную и сборную DMA, а также те, которые используют общий буфер, шину master DMA.)
Когда драйвер вызывает AllocateAdapterChannel, его подпрограмма AdapterControl запускается немедленно, если системный контроллер DMA или адаптер master шины доступен для операции DMA и если доступно достаточно регистров карты. В противном случае подпрограмма AdapterControl помещается в очередь до тех пор, пока эти ресурсы не будут доступны.
Если подпрограмма AdapterControl драйвера возвращает KeepObject или DeallocateObjectKeepRegisters (тем самым сохраняя системный канал контроллера DMA или адаптер master шины для дополнительных операций передачи), подпрограмма DpcForIsr или CustomDpc драйвера отвечает за освобождение объекта адаптера или регистров карты путем вызова FreeAdapterChannel или FreeMapRegisters. до того, как подпрограмма DPC завершит текущий IRP и вернет управление.