| 
			 
					阅读:1071回复:4
				 
				下面这段代码有点疑问!
					NTSTATUS WdmIoAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT pdo)
 
							{ NTSTATUS status; PDEVICE_OBJECT fdo; status = IoCreateDevice( DriverObject, sizeof(WDMIO_DEVICE_EXTENSION), NULL,FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo); if( !NT_SUCCESS(status)) return status; PWDMIO_DEVICE_EXTENSION dx = (PWDMIO_DEVICE_EXTENSION)fdo->DeviceExtension; dx->fdo = fdo; dx->pdo = pdo; dx->UsageCount = 1; dx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo,pdo); fdo->Flags |= DO_BUFFERED_IO|DO_POWER_PAGABLE; fdo->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; } 上面的代码中,fdo是在栈中创建的,就是说函数结束后fdo就无效了,这里有点不理解的是: 在IoAttachDeviceToDeviceStack之后,修改fdo的属性应该是没有用啊?fdo已经被附加(也许是某种复制操作)到设备栈中了  | 
	|
| 
			 沙发# 
								发布于:2002-12-01 22:39				
			
					怎么回事?				 
							 | 
	|
| 
			 板凳# 
								发布于:2002-12-01 22:37				
			
					明白了,谢谢!				 
							 | 
	|
| 
			 地板# 
								发布于:2002-12-01 10:33				
			
					fdo代表设备对象的指针。只要设备对象存在,任何时候都是可以访问的,附加到设备栈中不是复制操作,应该是类似链表插入的方式。				 
							 | 
	|
					
						
  | 
	
| 
			 地下室# 
								发布于:2002-12-01 09:35				
			
					大侠们!难道没人知道吗?
 
							这是一段几乎所有驱动都会遇到的代码啊! 希望哪位大侠高抬贵嘴啊! 解释一下吧!  | 
	|