RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1867回复:12

这样定义全局变量怎么错的??

楼主#
更多 发布于:2003-02-12 11:39
1、有三个文件init.cpp,dispatch.cpp,wdm1.h
2、在wdm1.h中声明了一个全局变量extern PUNICODE_STRING aa;
3、在init.cpp中的全局域定义它PUNICODE_STRING aa;
并且把DriverEntry中的参数IN PUNICODE_STRING RegistryPath赋值给aa:   aa=RegistryPath
4、在dispatch.cpp中调用这个全局变量aa
5、机器重起
------------------------
ice_fire333
驱动老牛
驱动老牛
  • 注册日期2002-10-08
  • 最后登录2007-08-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-12 11:54
没看明白,出什么错?
赵客缦胡缨,吴钩霜雪明。银鞍照白马,飒沓如流星。   十步杀一人,千里不留行。事了拂衣去,深藏身与名。   闲过信陵饮,脱剑膝前横。将炙啖朱亥,持觞劝侯嬴。   三杯吐然诺,五岳倒为轻。眼花耳热后,意气素霓生。   救赵挥金槌,邯郸先震惊。千秋二壮士,煊赫大梁城。   纵死侠骨香,不惭世上英。谁能书阁下。白首太玄经。
RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-12 11:59
我也不知道到底出了什么错,只是在我添加新硬件的时候给我重起。
去掉这些全局变量的定义就没问题了。
我这么定义全局变量有什么问题吗?
还是我的变量赋值有什么问题?

[编辑 -  2/12/03 by  RedFox_4U]
------------------------
LIUTANG
驱动大牛
驱动大牛
  • 注册日期2001-03-30
  • 最后登录2020-12-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望58点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-02-12 22:51
莫非在DriverEntry调用结束后RegistryPath被释放掉了?你用UNICODE中的类似于ANSI的strcpy的函数把内存拷贝下来试一下,在WDM里对内存的访问是非常严格的,特别是在NT/2K/XP下,不可用的内存连读都不行。
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-13 00:42
不能在两个CPP文件中都用extern,因此你不应该把extern写在h文件内,除非用#ifdef等把定义在init和其他程序区分开。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-13 09:45
你的 PUNICODE_STRING aa是在init页中的?是的话那部分启动完不就和你byebye了?
或者,你没有为aa分配内存? :)
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-13 09:49
#pragma code_seg(\"INIT\") // start INIT section
...
PUNICODE_STRING aa;

NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
...
}
#pragma code_seg() // end INIT section

我的PUNICODE_STRING aa在init.cpp中是在这个位置,是你说的init页吗?
令:#pragma 以前没用过,给讲讲好吧
------------------------
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-13 15:43
那还不死,应该叫init段吧,这部分的东西驱动启动完成后就丢掉了,你后来访问是无效内存,换个地方试试

另外你的赋值好像也有问题,punicode_string只是一个指针,在driverentry里你把它指向一个内核栈,等driverentry结束的时候指向的还是一个无效内存,还是先分配内存,用rtlinitunicodestring或rtlcopyunicodestring赋值试一下

#pragma的说明你在msdn里一搜就有了,说得比我详细 :D
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-02-13 22:53
ft,walt oney的书一点都没有看吗?
RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-14 09:37
walt oney的书叫什么名字,还真没有看呢。。。


现在一直看得叫《WDM驱动开发指南》
------------------------
RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-14 09:38
walt oney的书叫什么名字,还真没有看呢。。。

在哪里能搞到??


现在一直看得叫《WDM驱动开发指南》
------------------------
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-02-14 20:27
《Programming the Microsoft Windows Driver Model》
如果我不告诉你书名,你的分不就白给了? :D
就算没有看,也不能用pointer指向一个会被释放的pointer呀?
KanHu
驱动大牛
驱动大牛
  • 注册日期2002-10-20
  • 最后登录2005-06-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-02-16 13:23
1、有三个文件init.cpp,dispatch.cpp,wdm1.h
2、在wdm1.h中声明了一个全局变量extern PUNICODE_STRING aa;
3、在init.cpp中的全局域定义它PUNICODE_STRING aa;
并且把DriverEntry中的参数IN PUNICODE_STRING RegistryPath赋值给aa:   aa=RegistryPath
4、在dispatch.cpp中调用这个全局变量aa
5、机器重起
 


DriverEntry所在的段在初始化后,退出内存!
虚心请教 [img] http://www.driverdevelop.com/forum/upload/lsn_061/2005-01-09_2005-01-06_titi.jpg[/img]
游客

返回顶部