2013-08-20 42 views
1

我們正在編寫一個自定義的基於DMA的驅動程序使用WDF由PCI-Express設備的Windows 7內存對齊的DMA交易(Windows驅動程序基金會)

正如你可能知道,PCI-Express總線交易不允許跨過4k內存邊界。自定義設備不檢查這一點,因此我們需要確保驅動程序只請求與4k內存邊界對齊的DMA傳輸。

該設備的配置文件是WdfDmaProfilePacket64。

我們嘗試使用WdfDeviceSetAlignmentRequirement(DevExt->設備,4095),但是這並不會導致DMA開始地址正確對齊。

我們如何配置WDF框架,以便它只請求正確對齊的地址?

回答

0

,你可以在用戶空間應用程序處理這個問題,不知何故,你啓動/分配在用戶空間對齊的內存中,然後將其發送到內核程序。驅動程序並不容易對齊已經分配和啓動的內存。即使在用戶空間應用程序中,我們也必須分配額外的空間,然後使用對齊的部分(我知道,這並不漂亮,這就是爲什麼我建議在設備端解決這個問題)

例如,如果您使用C++用戶空間應用程序,你可以做類似this