gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:923回复:2

内存问题

楼主#
更多 发布于:2002-10-21 00:12
win2k wdm
我用下面语句申请的buffer在用户态可以访问吗,如何得到它的虚拟地址?
    m_pBuffer = ExAllocatePool(NonPagedPool, cBytes);
或者如何在用户态申请一个页对齐的内存,传递给内核作dma?

我只是想申请一块内存,由内核作dma,然后将指针传给用户态处理,通常应该怎么做啊?
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-21 08:40
你看看“如何在Driver和App之间传递指针”,在这里面附带了一篇文章,是OSR的,就是介绍这方面的,相当不错,我已经用它实现了DMA(s5933)
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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 );


//搞定。
Tom_lyd
游客

返回顶部