我正在将 Windows 7 网络驱动程序代码移植到 WEC7。我被 API MmGetPhysicalAddress 卡住了。我在 WEC7 中没有找到与此等效的 API。任何人都可以帮助进一步进行..
谢谢。
我正在将 Windows 7 网络驱动程序代码移植到 WEC7。我被 API MmGetPhysicalAddress 卡住了。我在 WEC7 中没有找到与此等效的 API。任何人都可以帮助进一步进行..
谢谢。
MmGetPhysicalAddress
在 Windows CE 中不可用,但您可能无论如何都不需要它。
在InitializeHandlerEx
回调的某个地方,驱动程序应该调用NdisMAllocateSharedMemory来分配 RX/TX 缓冲区。
NdisMAllocateSharedMemory
返回分配缓冲区的虚拟地址和物理地址,因此您可以保留物理地址,然后就不需要从操作系统请求它。
通常,物理地址将与虚拟缓冲区地址一起保存在特定于驱动程序的每个缓冲区结构中。
您可以在 中找到此示例实现C:\WINCE700\public\COMMON\oak\drivers\netcard\e100bex\60
。在mp_init.c
中,注意如何NICAllocAdapterMemory
调用NdisMAllocateSharedMemory
和存储每个缓冲区的物理地址pMpTxbuf->BufferPa
。
你可以看看 LockPages: https ://msdn.microsoft.com/en-us/library/ee482989.aspx 但是如果缓冲区不是使用 NDIS 函数分配的,它在物理内存中可能不是完全连续的,所以你可以需要检查一下。