vaccy
驱动牛犊
驱动牛犊
  • 注册日期2005-12-01
  • 最后登录2009-12-09
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1695回复:5

请教关于内存映射的一个问题。

楼主#
更多 发布于:2009-03-09 11:48
使用ReadFile的时候,我将如下一个结构体传给驱动
struct abc
{
   long type;
   unsigned char* buffer;
}
那我在驱动里面处理Read Irq时,对内存地址进行页面锁定和地址映射,那么buffer的地址是不是有可能是无效(未映射)的呢?
或者有可能有冲突?
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-03-09 22:05
你申请内存了吗?buffer得先指向一块内存啊
sky
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2009-03-10 00:41
你的buffer生存周期是多少?
如果遇到分非页buffer申请失败会如何?
时光如流水 抓紧时间实现自我价值
vaccy
驱动牛犊
驱动牛犊
  • 注册日期2005-12-01
  • 最后登录2009-12-09
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-03-10 10:51
这个abc结构体内存以及所包含的buffer内存是外部程序访问PCI卡时申请的。
我在访问abc的时候使用了MmGetSystemAddressForMdlSafe这个函数来对用户模式下的地址进行映射。
但是访问abc->buffer的时候也需要调用该函数吗?还是直接访问就可以了?
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-03-11 18:36
引用第3楼vaccy于2009-03-10 10:51发表的  :
这个abc结构体内存以及所包含的buffer内存是外部程序访问PCI卡时申请的。
我在访问abc的时候使用了MmGetSystemAddressForMdlSafe这个函数来对用户模式下的地址进行映射。
但是访问abc->buffer的时候也需要调用该函数吗?还是直接访问就可以了?

我也这样用过,在调用MmGetSystemAddressForMdlSafe之前你锁定了这块内存应该用MmGetSystemAddressForMdlSafe返回的地址驱动就可以访问了
sky
vaccy
驱动牛犊
驱动牛犊
  • 注册日期2005-12-01
  • 最后登录2009-12-09
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-03-12 16:53
我仔细的看了下,应该是不可以的,有出错的可能
游客

返回顶部