大型PnP驱动缓冲区

时间:2014-07-16 21:45:14

标签: c windows memory kernel buffer

我正在开发内核PnP驱动程序来映射我的FPGA。我需要四个32Mb连续内存缓冲区,因为我使用非分散聚集DMA。现在我在使用WdfCommonBufferCreate分配它们时遇到了问题,因为它有时会起作用,有时候不会。我不明白为什么分配失败,因为设备内存和设备没有变化。

有没有办法确保我的缓冲区会被创建?是什么导致零星失败?

我还想过用Bcdedit从Windows中删除128Mb并使用留给我缓冲区的空间。我没有问题,因为驱动程序是针对受控环境中的特定平台,但我没有找到通过Windows驱动程序API了解内存大小的方法。

有没有办法知道实际内存的大小?我可以实际使用剩余的内存,如果是,怎么样?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

那是很多连续的记忆。 Windows Driver Framework可以将大型DMA事务分解为驱动程序可以处理的大小,如果您通过WdfDmaEnablerSetMaximumScatterGatherElements告诉它最大的分散/聚集描述符数量。只需使用较小的固定数量的散布/聚集元素。