FredLiu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1582回复:6

有没有办法在driver中定义一些全局变量?

楼主#
更多 发布于:2004-06-17 00:43
各位,
我只,一般类似于全局变量的东西都应该存在device extension 里面,但我的问题是,我不得不在DriverEntry 中初始化并存下一些东西,但是这时候还没有device extension呢~~~
我想用ExAllocatePoolWithTag声明一段nonpaged memory,但是存这短memory 地址的pointer本身却没办法是nonpaged的,
。。。。。
到底有没有办法在device extension 之外存一些全局变量呢??

多谢指教~~
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-06-17 07:58
可以啊, 和普通的c程序一样, 定义在函数体之外, 在别的需要使用它文件中添加一个引用就行.
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2004-06-17 08:54
可以随意使用全局变量,只要你自己知道该如何处理共享访问即可.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wb_tiger
驱动牛犊
驱动牛犊
  • 注册日期2003-08-22
  • 最后登录2004-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-17 14:10
最简单的办法是写进注册表中,多次读写
FredLiu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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有关系~

望指教~~
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-06-17 19:51
全局的,如果没有特殊设置,应该是non paged

如果不放心,可以在build完了,用dumpbin带headers参数看看,全局变量应该在.data节
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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);
}

还是我
游客

返回顶部