guoba
驱动牛犊
驱动牛犊
  • 注册日期2001-04-24
  • 最后登录2002-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1870回复:5

请问怎么把自己申请的一片内存锁住

楼主#
更多 发布于:2001-07-25 19:42
在NT下开发驱动程序,因为有一片内存需要经常用到里面的内容,
所以想把这片内存锁住,里面的内容不会被修改和丢失,该怎么办?
请各位高手指点,谢谢!

最新喜欢:

xiangshifuxiangs...
锅巴
skysky
驱动小牛
驱动小牛
  • 注册日期2001-07-18
  • 最后登录2003-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-07-26 15:20
对于guoba的担心,如果自己申请了一块内存,在什么情况下会被“修改和丢失”呢?
一个是自己在程序里对这块内存进行了误操作,比如但同步出现问题,未能保护临界区。
第二个是用第三方软件对这块区进行了操作,这个有无可能?
一般来说,用ExAllocatePool分配的内存区就已经受到了系统的保护,如果自己不去操作它,应该是没问题的,对吗?
还有其他原因会导致被修改或丢失呢?
以德服人,以德服人
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-07-26 13:41
用ExAllocatePool分配一个非分页内存就可以达到目的吧?我说的对吗?
“萎软”,是Microsoft的小名!
skysky
驱动小牛
驱动小牛
  • 注册日期2001-07-18
  • 最后登录2003-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-07-26 11:30
对了,如果是使内存驻留,那就用MmProbeAndLockPages,楼上的说的函数在2000DDK没有,但功能应该是一样的。但要注意使用该函数,你的驱动必须是direct I/O方式,不能用buffer I/O。
以德服人,以德服人
guest
驱动牛犊
驱动牛犊
  • 注册日期2001-06-12
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-07-26 10:32
不知道你是像skysky说的同步对它的访问还是,还是想把这片内存缩存到内存里不让他交换到硬盘上,另外你的这片内存有多大?试过MmProbAndLocks吗?
skysky
驱动小牛
驱动小牛
  • 注册日期2001-07-18
  • 最后登录2003-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-07-26 09:25
可以用内核的同步机制,用mutex,spinlock等都可以。
比如用spinlock
1.先初始化
KeInitializeSpinLock
2.使用
    KeAcquireSpinLock(&pHw->SignalSpinLock, &OldIrql);
    KeReleaseSpinLock(&pHw->SignalSpinLock, OldIrql);
可锁定或释放。



以德服人,以德服人
游客

返回顶部