| 
			 
					阅读:2090回复:12
				 
				这样定义全局变量怎么错的??
					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、机器重起  | 
	|
					
						
						
						
						
  | 
	
| 
			 沙发# 
								发布于:2003-02-12 11:54				
			
					没看明白,出什么错?				 
							 | 
	|
					
						
  | 
	
| 
			 板凳# 
								发布于:2003-02-12 11:59				
			
					我也不知道到底出了什么错,只是在我添加新硬件的时候给我重起。
 
							去掉这些全局变量的定义就没问题了。 我这么定义全局变量有什么问题吗? 还是我的变量赋值有什么问题? [编辑 - 2/12/03 by RedFox_4U]  | 
	|
					
						
  | 
	
| 
			 地板# 
								发布于:2003-02-12 22:51				
			
					莫非在DriverEntry调用结束后RegistryPath被释放掉了?你用UNICODE中的类似于ANSI的strcpy的函数把内存拷贝下来试一下,在WDM里对内存的访问是非常严格的,特别是在NT/2K/XP下,不可用的内存连读都不行。				 
							 | 
	|
| 
			 地下室# 
								发布于:2003-02-13 00:42				
			
					不能在两个CPP文件中都用extern,因此你不应该把extern写在h文件内,除非用#ifdef等把定义在init和其他程序区分开。				 
							 | 
	|
| 
			 5楼# 
								发布于:2003-02-13 09:45				
			
					你的 PUNICODE_STRING aa是在init页中的?是的话那部分启动完不就和你byebye了?
 
							或者,你没有为aa分配内存? :)  | 
	|
					
						
  | 
	
| 
			 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 以前没用过,给讲讲好吧  | 
	|
					
						
  | 
	
| 
			 7楼# 
								发布于:2003-02-13 15:43				
			
					那还不死,应该叫init段吧,这部分的东西驱动启动完成后就丢掉了,你后来访问是无效内存,换个地方试试
 
							另外你的赋值好像也有问题,punicode_string只是一个指针,在driverentry里你把它指向一个内核栈,等driverentry结束的时候指向的还是一个无效内存,还是先分配内存,用rtlinitunicodestring或rtlcopyunicodestring赋值试一下 #pragma的说明你在msdn里一搜就有了,说得比我详细 :D  | 
	|
					
						
  | 
	
| 
			 8楼# 
								发布于:2003-02-13 22:53				
			
					ft,walt oney的书一点都没有看吗?				 
							 | 
	|
| 
			 9楼# 
								发布于:2003-02-14 09:37				
			
					walt oney的书叫什么名字,还真没有看呢。。。
 
							现在一直看得叫《WDM驱动开发指南》  | 
	|
					
						
  | 
	
| 
			 10楼# 
								发布于:2003-02-14 09:38				
			
					walt oney的书叫什么名字,还真没有看呢。。。
 
							在哪里能搞到?? 现在一直看得叫《WDM驱动开发指南》  | 
	|
					
						
  | 
	
| 
			 11楼# 
								发布于:2003-02-14 20:27				
			
					《Programming the Microsoft Windows Driver Model》
 
							如果我不告诉你书名,你的分不就白给了? :D 就算没有看,也不能用pointer指向一个会被释放的pointer呀?  | 
	|
| 
			 12楼# 
								发布于:2003-02-16 13:23				
			1、有三个文件init.cpp,dispatch.cpp,wdm1.h DriverEntry所在的段在初始化后,退出内存!  | 
	|
					
						
  |