AdapterControl ルーチンの記述
DMA デバイスのほとんどのドライバーには、DMA 操作の 開始を担当するMost drivers of DMA devices have an AdapterControl ルーチンがあります。 ( AdapterControl ルーチンを必要としないドライバーには、 分散/収集 DMA を使用する ものと、 共通バッファー、バス マスター DMA を使用する ものが含まれます)。
ドライバーが AllocateAdapterChannel を呼び出すと、システム DMA コントローラーまたはバス マスター アダプターが DMA 操作に使用できる場合、および十分なマップ レジスタが使用可能な場合は、その AdapterControl ルーチンが直ちに実行されます。 それ以外の場合、 AdapterControl ルーチンは、これらのリソースが使用可能になるまでキューに入れられます。
ドライバーの AdapterControl ルーチンが KeepObject または DeallocateObjectKeepRegisters を返す場合 (これにより、追加の転送操作のためにシステム DMA コントローラー チャネルまたはバス マスター アダプターが保持されます)、ドライバーの DpcForIsr または CustomDpc ルーチンは、DPC ルーチンが現在の IRP を完了し、コントロールを返す前に、 FreeAdapterChannel または FreeMapRegisters を呼び出してアダプター オブジェクトまたはマップ レジスタを解放する役割を担います。