Schreiben von AdapterControl-Routinen

Die meisten Treiber von DMA-Geräten verfügen über eine AdapterControl-Routine , die für das Initiieren von DMA-Vorgängen verantwortlich ist. (Treiber, die keine AdapterControl-Routinen erfordern, umfassen solche, die scatter/gather DMA verwenden, und solche, die common-buffer, bus-master DMA verwenden.)

Wenn ein Treiber AllocateAdapterChannel aufruft, wird die AdapterControl-Routine sofort ausgeführt, wenn der DMA-Controller des Systems oder der Bus-master-Adapter für einen DMA-Vorgang verfügbar ist und genügend Kartenregister verfügbar sind. Andernfalls wird die AdapterControl-Routine in die Warteschlange gestellt, bis diese Ressourcen verfügbar sind.

Wenn die AdapterControl-Routine des Treibers KeepObject oder DeallocateObjectKeepRegisters zurückgibt (wodurch der DMA-Controllerkanal des Systems oder der Bus-master-Adapter für zusätzliche Übertragungsvorgänge beibehalten wird), ist die DpcForIsr- oder CustomDpc-Routine des Treibers für die Freigabe des Adapterobjekts oder der Kartenregister durch Aufrufen von FreeAdapterChannel oder FreeMapRegisters verantwortlich. bevor die DPC-Routine den aktuellen IRP abschließt und die Steuerung zurückgibt.