编写 AdapterControl 例程
DMA 设备的大多数驱动程序都有 一个 AdapterControl 例程,该例程负责启动 DMA 操作。 (不需要 AdapterControl 例程的驱动程序包括 使用散点/收集 DMA 的驱动程序 和使用 common-buffer、bus-master DMA.)
当驱动程序调用 AllocateAdapterChannel 时,如果系统 DMA 控制器或总线-主适配器可用于 DMA 操作,并且有足够的映射寄存器可用,则会立即运行其 AdapterControl 例程。 否则, AdapterControl 例程将排入队列,直到这些资源可用。
如果驱动程序的 AdapterControl 例程返回 KeepObject 或 DeallocateObjectKeepRegisters (从而保留系统 DMA 控制器通道或总线主适配器,以便) 执行其他传输操作, 驱动程序的 DpcForIsr 或 CustomDpc 例程负责在 DPC 例程完成当前 IRP 并返回控件之前,通过调用 FreeAdapterChannel 或 FreeMapRegisters 来释放适配器对象或映射寄存器。