| 
			 
					阅读:1508回复:12
				 
				一个关于CreateFile的简单问题
					W2K下,如何用CreateFile获得WDM驱动程序的设备句柄?――其中的文件名\"\\\\.\\Name\"――\"Name\"所指为何物?是驱动程序文件名称还是驱动程序名,
 
							如果是编译后得到的驱动程序文件名,那么在下面的函数中的创建的名字是什么意思呢,起什么作用的? RtlInitUnicodeString(&linkName, L\"\\\\DosDevices\\\\ZSCPCI\"); code = IoCreateSymbolicLink(&linkName, &devName);  | 
	|
					
						最新喜欢:
  | 
	
| 
			 沙发# 
								发布于:2003-01-13 23:22				
			
					是符号连接名。就是驱动暴露给应用程序的名字。如果驱动程序想准许应用程序接触自己,就可以在驱动程序中使用内河API向外暴露一个,符号连接名。				 
							 | 
	|
| 
			 板凳# 
								发布于:2003-01-14 08:56				
			
					那这个符号连接名到底有什么作用?我打开驱动程序文件只需要用CreateFile打开驱动程序文件名啊?而不是和这个符号连接名联系啊!				 
							 | 
	|
					
						
  | 
	
| 
			 地板# 
								发布于:2003-01-14 09:37				
			
					\\\\.\\Name的Name是符号连接名,一般内核和win32用户态有不同的名字,为了在win32用户态访问驱动程序,你需要提供符号连接RtlInitUnicodeString(&linkName, L\"\\\\DosDevices\\\\ZSCPCI\");
 
							初始化符号连接字符串 这里符号连接为 \\\\??\\ZSCPCI以L开始是Unicode串 \\\\??\\也可写为\\\\DosDevices code = IoCreateSymbolicLink(&linkName, &devName); 在符号连接和设备名之间建立符号连接, devname是你的内核设备名  | 
	|
| 
			 地下室# 
								发布于:2003-01-14 11:28				
			
					-----------------------------------------
 
							那这个符号连接名到底有什么作用?我打开驱动程序文件只需要用CreateFile打开驱动程序文件名啊?而不是和这个符号连接名联系啊! ----------------------------------------- 错了,CreateFile中用的不是文件名。 即使在VXD时代也不是文件名。  | 
	|
| 
			 5楼# 
								发布于:2003-01-14 12:03				
			
					tjm 
 
							可是我以前写的一个VXD就是打开的驱动程序文件名啊?  | 
	|
					
						
  | 
	
| 
			 6楼# 
								发布于:2003-01-14 12:05				
			
					ambercctv 
 
							那么CreateFile打开的究竟是哪个名字?  | 
	|
					
						
  | 
	
| 
			 7楼# 
								发布于:2003-01-14 13:55				
			
					CreateFile()函数不仅可以打开文件,还可以打开如下类型
 
							1)File 2)Pipe 3)MailSlot 4)com1,HardDisk,FloppyDisk等 例如,可以这样打开串口1: CreateFile(\"\\\\\\\\.\\\\com1\",,,,,); 这里com1就是串口1的符号连接名  | 
	|
| 
			 8楼# 
								发布于:2003-01-14 13:56				
			
					给分吧,我都说了这么多了				 
							 | 
	|
| 
			 9楼# 
								发布于:2003-01-14 15:51				
			
					在VXD中你使用的是DDB中存的设备名,就是在VXD中,用
 
							Declare_virtual_device宏定义的哪个名字(第一个参数),因为你用了和XXX。VXD相同的名字XXX,所以看起来好象是用的文件名。  | 
	|
| 
			 10楼# 
								发布于:2003-01-15 09:09				
			
					说了这么多,我都糊涂了,我还是去试试好了。。。。。 :D :D				 
							 | 
	|
					
						
  | 
	
| 
			 11楼# 
								发布于:2003-01-15 11:48				
			
					这有什么好弧度的。
 
							CreateFile()可以用来打开多种对象(ambercctv说过了), 驱动也是一种对象, ---------------------- tjm 可是我以前写的一个VXD就是打开的驱动程序文件名啊? ----------------------- 在9X的VXD中驱动对象的名字存在DDB中(在VXD中用Declare_virtual_device宏来实现注册), 因为多数情况下VXD中驱动对象的名字习惯上用驱动文件的名字(没有后缀),所以表观上就使人糊涂。 在NT结构中,驱动对象的名字有两个,一个是内核名,只有内核程序可以使用,一个是符号连接名,供WIN32程序使用,CreateFile()就使用这个符号连接名。 微挣这点分,要吐血了。  | 
	|
| 
			 12楼# 
								发布于:2003-01-15 19:46				
			
					tjm,ambercctv谢了,呵呵,我现在就给分,我再多加点分啊
 
							 | 
	|
					
						
  |