WEC7中的MmGetPhysicalAddress的等效API

我将Windows 7networking驱动程序代码移植到WEC7。 我陷入了API MmGetPhysicalAddress。 在WEC7中,我没有find相应的API。 任何人都可以帮助进一步进行..

PNET_BUFFER os_buf = NET_BUFFER_LIST_FIRST_NB((PNET_BUFFER_LIST)skb->wb_os_buf); PMDL pmdl = NET_BUFFER_FIRST_MDL(os_buf); ULONG length = 0; int8_t *data = NULL; PHYSICAL_ADDRESS addr; NdisQueryMdl(pmdl, &data, &length, NormalPagePriority); addr = MmGetPhysicalAddress(data); skb->wb_mapped_paddr_lo[0] = addr.LowPart + NET_BUFFER_DATA_OFFSET(os_buf); 

我怎样才能把上面的代码的最后一行移到WEC7?

谢谢。

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函数分配它可能不完全连续在物理内存,所以你可能需要检查。