阅读:1466回复:3
最近写磁盘过滤驱动,我基本功不够,问个内存分配问题!
磁盘过滤驱动框架用diskperf,然后我再DriverEntry()入口点分配一个8MB的非分页内存[用ExAllocatePoolWithTag],这个内存是全局变量
然后在IRP_MJ_WIRTE例程操作这片内存,结果发现,里面的数据老是发生变化,也就是前一段内存的内容是正确的,然后中间部分数据是错误,然后后半部分也是错误,但不完全错。奇怪了。 我已经用同步处理了。 如果在驱动中,那如何正确操作这个8MB的内存呢? 有说,可能是你的8MB内存是不连续的,也有可能是你在读写的时候,有些数据被交换了。 |
|
沙发#
发布于:2007-02-08 16:57
说说你们的经验吧
|
|
板凳#
发布于:2007-02-08 18:54
对于任何全局变量的读/写操作,都要提供有效的锁机制,全局内存也不例外。
KeAcquireSpinLock(&gDecryptCtlLock,&irql); KeEnterCriticalRegion(); if(ExAcquireResourceExclusiveLite(&gDecryptCtlResource,FALSE) ) { gDecryptCtl = TRUE; ExReleaseResourceLite(&gDecryptCtlResource); } KeLeaveCriticalRegion(); KeReleaseSpinLock(&gDecryptCtlLock,irql); |
|
驱动小牛
![]() |
地板#
发布于:2007-02-09 11:25
FAST_MUTEX 就可以了。
|
|