hsly110
驱动牛犊
驱动牛犊
  • 注册日期2004-11-03
  • 最后登录2007-12-31
  • 粉丝1
  • 关注0
  • 积分378分
  • 威望40点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
阅读:1466回复:3

最近写磁盘过滤驱动,我基本功不够,问个内存分配问题!

楼主#
更多 发布于:2007-02-02 15:19
  磁盘过滤驱动框架用diskperf,然后我再DriverEntry()入口点分配一个8MB的非分页内存[用ExAllocatePoolWithTag],这个内存是全局变量

然后在IRP_MJ_WIRTE例程操作这片内存,结果发现,里面的数据老是发生变化,也就是前一段内存的内容是正确的,然后中间部分数据是错误,然后后半部分也是错误,但不完全错。奇怪了。

我已经用同步处理了。

如果在驱动中,那如何正确操作这个8MB的内存呢? 有说,可能是你的8MB内存是不连续的,也有可能是你在读写的时候,有些数据被交换了。
hsly110
驱动牛犊
驱动牛犊
  • 注册日期2004-11-03
  • 最后登录2007-12-31
  • 粉丝1
  • 关注0
  • 积分378分
  • 威望40点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-02-08 16:57
说说你们的经验吧
yaolixing
驱动小牛
驱动小牛
  • 注册日期2006-06-27
  • 最后登录2010-07-15
  • 粉丝1
  • 关注0
  • 积分991分
  • 威望135点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-02-08 18:54
对于任何全局变量的读/写操作,都要提供有效的锁机制,全局内存也不例外。
                KeAcquireSpinLock(&gDecryptCtlLock,&irql);
                KeEnterCriticalRegion();
                if(ExAcquireResourceExclusiveLite(&gDecryptCtlResource,FALSE) )
                {                
                  
                        gDecryptCtl   = TRUE;
                  
                   ExReleaseResourceLite(&gDecryptCtlResource);
                }
                KeLeaveCriticalRegion();
                KeReleaseSpinLock(&gDecryptCtlLock,irql);
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
地板#
发布于:2007-02-09 11:25
FAST_MUTEX 就可以了。
商务MSN:YanDong_8212@163.com
游客

返回顶部