我的应用程序和USB硬件传输数据的时候,每当传输不成功的时候(DeviceIoControl没有返回,而不是返回失败),一将USB线拔掉或者reset USB设备,操作系统就会挂起,鼠标、键盘都不响应,这时就只能通过断电来重启机子。请问有没有谁碰到过这种问题?该如何解决?谢谢
回复(11) 2007-10-09 10:08 来自版块 - USB驱动开发
表情
lver0929呵呵,确实,驱动里面没有做Cancel IRP,所以CancelIo()可能会不起作用 顺便问下:softice内有没将硬件重枚举或类似于强制CancelIo()的命令?(2007-10-10 17:36)
fanzi用overlap操作这个设备,但我怀疑你的驱动没有支持,呵呵。 如果支持,可以在应用程序做个定时器,超时就 CancelIo(yourhandle);(2007-10-10 16:18)
lver0929多谢楼上的几位朋友 我的想法是看能不能不修改驱动,因为同样的程序操作两个不同的硬件,一个运行正常,一个就出现了上述的现象 当然,驱动还是存在一些问题,比如在传输的时候没有timeout处理等;但是,由于驱动不是我写的,虽然有源码,贸然修改怕出现意想不到的结果,所以我想在硬件和应用...(2007-10-10 15:52)
gutian98用户被禁言,该主题自动屏蔽!(2007-10-10 12:40)
fanzi设置一个定时器,如果timout,就如下 Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Information = info; IoCompleteRequest(Irp,...(2007-10-10 12:16)
lver0929谢谢楼上的同学 确实,在DeviceIoControl pending的时候,我没有取消这个请求。但我觉得如果USB线拔掉了,那么此时的USB设备就不存在,DeviceIoControl 便会返回FALSE,系统不应该会挂起啊 欢迎讨论(2007-10-10 12:09)
gutian98用户被禁言,该主题自动屏蔽!(2007-10-10 11:49)
lver0929驱动我去年用了一年,一直没有这个现象。以前应用程序如果从USB硬件读不到数,拔掉USB线DeviceIoControl就返回FALSE,而现在一拔线PC就挂起了,DeviceIoControl没有返回; 我的鼠标是USB的,键盘是ps2的,机子挂起之后所有硬件都没有响应,但是so...(2007-10-10 11:40)
fanzi驱动里对cancel irp进行处理呢,好像要写个回调函数吧(2007-10-09 20:50)
Apocalypse好像你没有说系统除了键鼠以外是否正常运作,大概你的键盘和鼠标也是USB口的,换ps/2口的键鼠试试 还有可能是因为共用一个usb root hub,你的设备把状态搞乱了?分开用不同的usb root hub 试试?(2007-10-09 15:12)

返回顶部