问题找到了可是不知道,如何原因,求解:
问题:
原程序在DriverEntry建立了两个设备对象,一个是串口1过滤驱动对象,一个是与应用程序交互的设备控制对象用于通讯.建立的顺序是先串口1过滤驱动对象,后控制对象.最后在ComSpy_Unload中使用(FILE_DEVICE_COMPORT指的是交互的设备控制对象的标识)
pFirstObj=DriverObject->DeviceObject;
if(pFirstObj->DeviceType==FILE_DEVICE_COMPORT)
{}
来关闭设备控制对象并清理数据.
我改动后的是:
在DriverEntry建立一个是与应用程序交互的设备控制对象用于通讯. 将串口1过滤驱动对象的建立放在了交互的设备控制对象的交互控制例程中:
如:case IO_OPEN_COM:
也就是说建立对象的顺序反过来了.
问题就来了.ComSpy_Unload中现在调用(FILE_DEVICE_COMPORT指的是交互的设备控制对象的标识)
pFirstObj=DriverObject->DeviceObject;
if(pFirstObj->DeviceType==FILE_DEVICE_COMPORT)
{}
DriverObject->DeviceObject指向的不是交互的设备控制对象了,所以if(pFirstObj->DeviceType==FILE_DEVICE_COMPORT)就不成立了,因此交互的设备控制对象没有被清理.
求教:好象是谁最后建立DriverObject->DeviceObject指象的就是那个设备对象.
为什么会这样,要如何解决.