阅读:4241回复:13
WDM 驱动中的全局变量处在分页内存中还是非分页内存中?
我的一个 9x 下可以正常运行的内核移植到 2000 下就出现了 DRIVER_IRQL_NOT_LESS_OR_EQUAL 蓝屏,我想知道 VxD 中是不是没有 IRQL 这个概念,我的内核(几乎没有涉及任何内核调用,全部是内存数据的处理)在 9x 下很正常,放在 Passthru 里面就会蓝屏,一时找不到原因,所以现在怀疑跟内存有关系。
希望各位给一些建议,谢谢! |
|
最新喜欢:zackar... |
沙发#
发布于:2002-12-19 11:09
我的程序是分步测试的,我改过的 Passthru 框架运行很正常,现在挂上内核以后在 MPSendPackets 里面一调用我内核里的函数处理包就蓝屏,痛苦啊!
|
|
板凳#
发布于:2002-12-19 11:24
全局变量使用的是非分页的内存池空间
|
|
|
地板#
发布于:2002-12-19 11:31
还有一些弱智的疑问:
(1)VxD 中是不是没有 IRQL 这个概念? (2)函数调用跟 IRQL 有什么样的关系?在函数 A 中调用函数 B,这两个函数所处的 IRQL 肯定一样还是有可能不一样? (3)我上面遇到的问题各位大侠凭你们的直觉可能是哪里的问题?希望凭借你们丰富的经验给我一些建议。 |
|
地下室#
发布于:2002-12-19 11:51
线程优先级是与IRQL非常不同的概念 你的问题估计是不满足:所有对共享数据的访问都应该在同一(提升的)IRQL上进行。 |
|
|
5楼#
发布于:2002-12-19 12:57
内存的问题和处理方式的问题,
vxd里面没有IRQL, |
|
|
6楼#
发布于:2002-12-19 12:59
为什么要在MPSendPackets里面发包?在这里发包你是怎么处理那些内存释放的?
|
|
|
7楼#
发布于:2002-12-19 13:09
如果没有调用过KeRaisIRQL函数,在同一个线程空间它的IRQL总是一样的。如果有严重的内存错误同样也会引起上面所说的错误,而且通常是如此。所以最好还是检查以下你的使用内存的部分,使用全局变量一定要注意同步(函数重入),还有确认在完成例程中处理数据。
|
|
8楼#
发布于:2002-12-19 15:36
为什么要在MPSendPackets里面发包?在这里发包你是怎么处理那些内存释放的? 我是在这里处理过之后把它发出 我用一个内部链表来区分自己发的包和上层发的包,最后在 SendComplete 里进行不同的处理(仿照 PIM 的) |
|
9楼#
发布于:2002-12-19 15:37
如果没有调用过KeRaisIRQL函数,在同一个线程空间它的IRQL总是一样的 这是我想要的答案之一:) |
|
10楼#
发布于:2002-12-19 16:26
使用全局变量一定要注意同步(函数重入), 能解释一下吗? 你说的这些概念,我不是很清楚。 谢谢!!!!!!!!!!!!! |
|
|
11楼#
发布于:2002-12-19 17:34
能解释一下吗? 呵呵俺倒是知道一点,先发表一下看法,关公面前耍大刀――献丑了:) NDIS 是异步方式的,所以当对函数 A 的调用尚未结束时有可能函数 A 又被调用了,这就是“重入”。 函数重入时使用的局部变量是处于不同栈上的,所以不会相互影响,而所有全局变量只有一份,所以不做处理会有问题。 哪位高人再讲讲这方面的经验好吗?全当俺抛砖引玉了呵呵:) |
|
12楼#
发布于:2002-12-19 22:03
呵呵,有个困惑的问题, 优势我在程序段中定义一个变量,编译通不过,可是吧定义放到函数的开头,就通过了,不知道是什么问题啊
|
|
|
13楼#
发布于:2008-05-24 20:18
这是不是早期c语言的标准要求的啊?
|
|
|