阅读:1582回复:6
有没有办法在driver中定义一些全局变量?
各位,
我只,一般类似于全局变量的东西都应该存在device extension 里面,但我的问题是,我不得不在DriverEntry 中初始化并存下一些东西,但是这时候还没有device extension呢~~~ 我想用ExAllocatePoolWithTag声明一段nonpaged memory,但是存这短memory 地址的pointer本身却没办法是nonpaged的, 。。。。。 到底有没有办法在device extension 之外存一些全局变量呢?? 多谢指教~~ |
|
沙发#
发布于:2004-06-17 07:58
可以啊, 和普通的c程序一样, 定义在函数体之外, 在别的需要使用它文件中添加一个引用就行.
|
|
|
板凳#
发布于:2004-06-17 08:54
可以随意使用全局变量,只要你自己知道该如何处理共享访问即可.
|
|
|
地板#
发布于:2004-06-17 14:10
最简单的办法是写进注册表中,多次读写
|
|
地下室#
发布于:2004-06-17 15:43
多谢回复~
但是我有一些概念上的不解: 例如,虽然我可以在函数体外生命全局变量,但是这个变量是不是non-page的呢? 如果该变量不是non-page,那么我在另外一个DISPACH_LEVEL的函数中调用该变量的时候,会不会出现问题呢?(因为,据我的理解,只有non-page的变量才是能够保证在何时何处调用,都是有效的) 我问以上的问题,是因为,我确实声明了一个全局变量,并在DriverEntry里面给他赋值,但在另一个irql=DISPACH_LEVEL的routine中使用该变量的时候蓝屏了~~ windbg bugcheck给出的原因是irql too high...reference a nonpageable or totally invalid address 不知道是不是这个问题是不是和全局变量是否为non-pagable有关系~ 望指教~~ |
|
5楼#
发布于:2004-06-17 19:51
全局的,如果没有特殊设置,应该是non paged
如果不放心,可以在build完了,用dumpbin带headers参数看看,全局变量应该在.data节 |
|
6楼#
发布于:2004-06-18 14:24
可以可以。我正好用过了
UNICODE_STRING ServKey; NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { 把pRegistryPath 存于ServerKey } VOID DriverUnload ( IN PDRIVER_OBJECT pDriverObject ) { // //Never forget to free the global Unicode string // RtlFreeUnicodeString(&ServKey); } |
|
|