使用以封包為基礎的系統 DMA

使用封包型 DMA 的次級裝置驅動程式會在處理要求 DMA 傳輸的 IRP 時呼叫下列一般支援例程:

IoGetDmaAdapter回的配接器對象指標是每個例程的必要參數,但 KeFlushIoBuffersMmGetMdlVirtualAddress 除外,這需要 Irp-MdlAddress> 傳遞之 MDL 的指標。

個別驅動程式會根據每個驅動程序的實作方式,在不同的時間點呼叫此序列的支援例程,以服務其裝置。 例如,某個驅動程式的 StartIo 例程可能會呼叫 AllocateAdapterChannel,另一個驅動程式可能會從從驅動程式建立的聯鎖佇列中移除 IRP 的例程進行此呼叫,而另一個驅動程式可能會在其次級 DMA 裝置指出它已準備好傳輸數據時進行此呼叫。