阅读:1950回复:12
关于驱动卸载重起的问题!!!
我的程序运行正常,在\"设备管理器\"中删除驱动也正常,但是在下面两种情况下会出问题:
1.当我没有手动卸载驱动而直接拔掉板卡后重起机器,则win2000加载运行时在进入系统的时候会自动再次重起,且每次都是这样 2。当我更新板卡的驱动用另外一个可用的但和这个完全不同的驱动 程序时,也会重起出现上面的现象 我在安全模式下进入注册表将该驱动相关的项目删除后就可以重新进入了. 请问上面是什么原因造成的啊?? |
|
沙发#
发布于:2003-08-29 14:17
AllenZh
谢谢你这么热心啊,呵呵,我的问题解决了。原因是这样的,是在DriverUnload的时候出错了。IoDeleteDevice 的对象错误,用softice跟出来的。我在广州,有时间多向你请教。 minsoft 驱动很早以前就写好的,一直只在本机上用,拿到别的机器上才发现有这种问题了,不过问题大概差不多吧。 就象AllenZh和你所说的是DO的问题了, |
|
板凳#
发布于:2003-08-29 11:21
问题就出在你两次创建了DO,而且可能这两个DO你都是在REMOVE―DEVICE时进行IoDelete的,当你插有卡并手动卸载时,会运行PnPRemoveDevice,所以没有异常,而没有插卡时,DriverEntry会执行,AddDevice不运行也没有PnP消息,那你创建的DO就没有机会Delete了,所以就.....
解决方法是将DriverEntry中创建的DO的删除动作移到Unload中或者在DriverEntry中不要(也不应该)创建DO,即使要支持多卡也不是一定要呀。 |
|
|
地板#
发布于:2003-08-29 10:43
因为你在DriverEntry中有创建DO(我姑且叫它Control DO,简称CDO好了,对应的在AddDevice中那些叫Function DO简称FDO),所以虽然你没有硬件,你也可以让你的驱动继续运行,当然这时有PNP到你的Control DO中,并且这时应该没有成功创建FDO,虽然这样,你仍然可让AddDevice返回成功,因为有CDO存在,系统照常可允许,但是要注意的是系统有些请求不能向下传递了,因为你的CDO可能没有连接到设备栈中(我通常是这样的),所以你需要区分IRP到底需要发送到什么地方,如果可能Mail你的Driver给我,我可帮你调试一下,但是不能保证问题得与解决,如果你在深圳可和我联系,我本周6可能有空。
|
|
|
地下室#
发布于:2003-08-29 10:37
查一下,可能在处理DriverObject->DriverUnload消息时候出错。
由于卡拔掉后,驱动在内存中仍然会被加载,它先进入DRIVERENTRY,若是找不到硬件,就会进入DriverUnload处理响应消息. |
|
|
5楼#
发布于:2003-08-28 21:06
AllenZh
我的DO在DriverEntery和AddDevice中都创建了,为了支持多卡才这样做的。 在DriverEnteryhe中创建的这个有什么关系呢? 另外,在系统启动加载驱动的时候,它的具体顺序是什么呢???我想要是把卡给拔掉的话,pnp管理器就不应该执行我的驱动的pnp过程了. |
|
6楼#
发布于:2003-08-28 18:00
AllenZh 直接删除和拔插是有区别的 |
|
|
7楼#
发布于:2003-08-28 17:59
用softice跟的时候出现这样的情况。 拔掉卡运行不起来,应该可能,但是不正常就有问题了,我想你是没有处理好,另外你的驱动在还没有进行Pnp时就有问题,那么你的DO是什么时候创建的,在DriverEntery中而不是在AddDevice中吗? |
|
|
8楼#
发布于:2003-08-28 15:54
AllenZh
我直接删除驱动的时候,处理IRP_MN_REMOVE_DEVICE一切正常,在调用IoDeleteDevice正确释放! |
|
9楼#
发布于:2003-08-28 15:35
用softice跟的时候出现这样的情况。
当我关机将卡拔掉后,重新启动,我把StartType设为2,则我在进入win2000的时候用softice截取到我在驱动中打印出来的消息。 可以看到系统仍然加载了驱动load32 START=.....MOD=\"我的驱动\" 在DriverEntry中完全正常,可是在刚好退出DriverEntry以后,还没有进入pnp时候出现异常。 |
|
10楼#
发布于:2003-08-26 17:26
我的程序运行正常,在\"设备管理器\"中删除驱动也正常,但是在下面两种情况下会出问题: 使用SoftIce跟踪一下,看看是否在处理IRP_MN_REMOVE_DEVICE前一切正常,而在调用IoDeleteDevice时失败,如果是我想是你的驱动有问题,并且是对支持热插拔没有处理好 |
|
|
11楼#
发布于:2003-08-26 14:45
PNP部分没有做好
|
|
|
12楼#
发布于:2003-08-26 13:25
是支持PNP的PCI板卡吗?你的板卡操作系统能够自动识别吗?
|
|