AdapterControl 루틴 작성

대부분의 DMA 디바이스 드라이버에는 DMA 작업을 시작하는 AdapterControl 루틴이 있습니다. (AdapterControl 루틴이 필요하지 않은 드라이버에는 분산/수집 DMA를 사용하는 드라이버와 공통 버퍼, 버스 master DMA를 사용하는 드라이버가 포함됩니다.)

드라이버가 AllocateAdapterChannel을 호출하면 시스템 DMA 컨트롤러 또는 버스 master 어댑터를 DMA 작업에 사용할 수 있고 충분한 맵 레지스터를 사용할 수 있는 경우 AdapterControl 루틴이 즉시 실행됩니다. 그렇지 않으면 이러한 리소스를 사용할 수 있게 될 때까지 AdapterControl 루틴이 큐에 대기됩니다.

드라이버의 AdapterControl 루틴이 KeepObject 또는 DeallocateObjectKeepRegisters를 반환하는 경우(추가 전송 작업을 위해 시스템 DMA 컨트롤러 채널 또는 버스 master 어댑터를 유지함) 드라이버의 DpcForIsr 또는 CustomDpc 루틴은 FreeAdapterChannel 또는 FreeMapRegisters를 호출하여 어댑터 개체 또는 맵 레지스터를 해제합니다. DPC 루틴이 현재 IRP를 완료하고 컨트롤을 반환하기 전에