阅读:922回复:2
内存问题
win2k wdm
我用下面语句申请的buffer在用户态可以访问吗,如何得到它的虚拟地址? m_pBuffer = ExAllocatePool(NonPagedPool, cBytes); 或者如何在用户态申请一个页对齐的内存,传递给内核作dma? 我只是想申请一块内存,由内核作dma,然后将指针传给用户态处理,通常应该怎么做啊? |
|
沙发#
发布于:2002-10-21 08:40
你看看“如何在Driver和App之间传递指针”,在这里面附带了一篇文章,是OSR的,就是介绍这方面的,相当不错,我已经用它实现了DMA(s5933)
|
|
板凳#
发布于:2002-10-21 09:20
1. 分配内存
PVOID pSharedMemory =ExAllocatePool( NonPagedPool, size ); 2.分配MDL PMDL pMdl =IoAllocateMdl( pSharedMemory, size, FALSE,FALSE, NULL ); 3. MmBuildMdlForNonPagedPool( pMdl ); 4.映到虚拟地址到用户空间 PVOID pUserPoint = MmMapLockedPages( pMdl, UserMode ); //搞定。 |
|
|