编写 AdapterControl 例程

DMA 设备的大多数驱动程序都有 一个 AdapterControl 例程,该例程负责启动 DMA 操作。 (不需要 AdapterControl 例程的驱动程序包括 使用散点/收集 DMA 的驱动程序 和使用 common-buffer、bus-master DMA.)

当驱动程序调用 AllocateAdapterChannel 时,如果系统 DMA 控制器或总线-主适配器可用于 DMA 操作,并且有足够的映射寄存器可用,则会立即运行其 AdapterControl 例程。 否则, AdapterControl 例程将排入队列,直到这些资源可用。

如果驱动程序的 AdapterControl 例程返回 KeepObjectDeallocateObjectKeepRegisters (从而保留系统 DMA 控制器通道或总线主适配器,以便) 执行其他传输操作, 驱动程序的 DpcForIsrCustomDpc 例程负责在 DPC 例程完成当前 IRP 并返回控件之前,通过调用 FreeAdapterChannelFreeMapRegisters 来释放适配器对象或映射寄存器。