阅读:1868回复:5
请问怎么把自己申请的一片内存锁住
在NT下开发驱动程序,因为有一片内存需要经常用到里面的内容,
所以想把这片内存锁住,里面的内容不会被修改和丢失,该怎么办? 请各位高手指点,谢谢! |
|
最新喜欢:![]()
|
沙发#
发布于:2001-07-26 09:25
可以用内核的同步机制,用mutex,spinlock等都可以。
比如用spinlock 1.先初始化 KeInitializeSpinLock 2.使用 KeAcquireSpinLock(&pHw->SignalSpinLock, &OldIrql); KeReleaseSpinLock(&pHw->SignalSpinLock, OldIrql); 可锁定或释放。 |
|
|
板凳#
发布于:2001-07-26 10:32
不知道你是像skysky说的同步对它的访问还是,还是想把这片内存缩存到内存里不让他交换到硬盘上,另外你的这片内存有多大?试过MmProbAndLocks吗?
|
|
地板#
发布于:2001-07-26 11:30
对了,如果是使内存驻留,那就用MmProbeAndLockPages,楼上的说的函数在2000DDK没有,但功能应该是一样的。但要注意使用该函数,你的驱动必须是direct I/O方式,不能用buffer I/O。
|
|
|
地下室#
发布于:2001-07-26 13:41
用ExAllocatePool分配一个非分页内存就可以达到目的吧?我说的对吗?
|
|
|
5楼#
发布于:2001-07-26 15:20
对于guoba的担心,如果自己申请了一块内存,在什么情况下会被“修改和丢失”呢?
一个是自己在程序里对这块内存进行了误操作,比如但同步出现问题,未能保护临界区。 第二个是用第三方软件对这块区进行了操作,这个有无可能? 一般来说,用ExAllocatePool分配的内存区就已经受到了系统的保护,如果自己不去操作它,应该是没问题的,对吗? 还有其他原因会导致被修改或丢失呢? |
|
|