blackeye527
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2005-07-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1243回复:6

帮忙解觉一下这个问题

楼主#
更多 发布于:2002-12-04 08:49
现小弟遇到这样一个问题,就是对一块USB板用ISO Stream方式采集视频数据。假如在工作的时候把USB从主机上拔掉,程序、驱动、系统都不死,(驱动还在正常采集数据,只是采集不到数据),当我把USB接口插回去死,机器立即蓝屏重起。后来反复试验发现,主要是设备句柄还没有关闭,当设备再次被检测到时机器就死了。

请教大侠这个问题怎么解决。在驱动层有没有办法,在应用层怎么获知设备被删除,谢先
学习是一种乐趣,是一种享受,是一种生活需要。
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-04 09:05
以前做USB鼠标的时候也遇到过类似问题。在驱动层不用做什么特殊处理,只要PNP消息处理正确就行了。在应用层,当设备被拔掉时,实际上Driver在这个时候已经被卸载了,所以当继续调用DeviceIoControl时会出错,这时,先关掉原来打开的句柄,让后让应用程序进入定时检测状态,也就是使用一个Timer,然后在Timer的Callback函数里去试着打开Driver,如果打不开,说明设备还没有接回去,如果能够打开,则退出检测状态,继续原来的工作。
blackeye527
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2005-07-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-04 09:44
有没有驱动通知应用层的方法,比如说应用层接受驱动层发出的事件等等
学习是一种乐趣,是一种享受,是一种生活需要。
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-12-04 10:32
去下载版主的 zboard 源代码. :D
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-12-04 10:33
zboadr 论坛. 补充一句.
www.bjjcz.com
blackeye527
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2005-07-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-04 11:13
是什么东东呀
学习是一种乐趣,是一种享受,是一种生活需要。
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-04 19:04
如果真的需要驱动通知应用层的话,可先从应用层生成一个Event,然后把Event Handle传给Driver,如果是WDM的话,用ObReferenceObjectByHandle把EventHandle转为Driver可以使用的另一个Handle,然后在需要的时候用KeSetEvent触发事件。如果是VXD,则先在应用层用OpenVxDHandle把EventHandle转化一下,然后把转化后的Handle传给Driver,再由Driver调用VWIN32_ResetEvent来触发事件。
游客

返回顶部