Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2281回复:14

为什么不能超时退出呢?

楼主#
更多 发布于:2001-05-18 10:44
我做的应用程序调用DeviceIoControl通过驱动来从usb读数据,
但此时usb并不给我发数据,结果我的驱动就等在那里,等呀等呀
死活不肯出来,我怎么办?
驱动中是这么写的
      status = KeWaitForSingleObject(
                    &event,
                    Suspended,
                    KernelMode,
                    FALSE,
                    NULL);
当我的一个线程再调用ioctrl在等待时,我可以用另外的线程来终止它吗?怎么做?

最新喜欢:

brightfengbright...
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
dgxu
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-05-18 11:43
KeWaitForSingleObject()函数的最后一个参数是超时时间,我是这样用的:
LARGE_INTEGER TimeOut ;
TimeOut.QuadPart = - 1000000 ;
........
status = KeWaitForSingleObject(
                  &event,
                  Suspended,
                  KernelMode,
                  FALSE,
                  &TimeOut);
驱动程序没有傻等,一会儿就退出来了,可是在IoCompleteRequest()时出现soft_ice异常:
Break due to page Fault ( 0Eh ) . Fault = 0000
MSR LastExceptionFromIP = FF00A391
MSR LastExceptionToIP = FF00A3AE
然后我退出soft_ice(打faults off命令),就出现蓝屏,说
A fatal exception 0E has occurred at 0028:FF00A3BE........
不知道是怎么回事?那位大虾能告诉我?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-05-18 13:07
SubmitUrb不是可以设置CompletionRoutine吗?你在那里拿数据。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-05-18 15:17
不太明白!
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Henry
驱动牛犊
驱动牛犊
  • 注册日期2001-04-27
  • 最后登录2011-06-20
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-05-18 16:30
当你使用IoCallDriver来SubmitUrb之前,先用IoSetCompletionRoutine来设置一个完成例程。
驱动人生。
dgxu
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-05-18 17:14
If IoCallDriver() routine return STATUS_PENDING, can the CompletionRoutine be excuted ?
What shall I do in the CompletionRoutine?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-05-18 18:06
[QUOTE]原本由 dgxu 发表
[B]If IoCallDriver() routine return STATUS_PENDING, can the CompletionRoutine be excuted ?
What shall I do in the CompletionRoutine? [/B][/QUOTE]
No.
Read the data from the buffer.
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-05-18 18:07
The completion routine will be called when the lower driver completes the irp.
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
dgxu
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-05-18 21:44
但是还是不能实现超时退出呀,我现在是这种情况:

firmware里没有写处理out包的程序,但是我的应用程序要求

读1024个字节,这样驱动程序里调用底层驱动总是返回

STATUS_PENDING ,这个irp的完成例程也就没法执行,应用程序

也停在那儿,不知道怎么让它退出来
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-05-21 09:42
[QUOTE]原本由 dgxu 发表
[B]但是还是不能实现超时退出呀,我现在是这种情况:

firmware里没有写处理out包的程序,但是我的应用程序要求

读1024个字节,这样驱动程序里调用底层驱动总是返回

STATUS_PENDING ,这个irp的完成例程也就没法执行,应用程序

也停在那儿,不知道怎么让它退出来
 [/B][/QUOTE]
这跟out包有什么关系?因该是in包啊!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
argan
驱动牛犊
驱动牛犊
  • 注册日期2001-03-26
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-05-21 16:39
呵呵,还没有说完呢,
dgxu肯定说的是in包,怎么办?
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-05-21 18:45
Re: Re: 为什么不能超时退出呢?

引用:

No.
Read the data from the buffer.

我并不想读数据了,我只是想让他能退出哪个io请求就可以了,否则我的引用程序就会一直在等待,如何做?
而且那个时候也没有数据呀,我能读到什么呢?
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-05-22 09:13
[QUOTE]原本由 Buddha 发表
[B]Re: Re: 为什么不能超时退出呢?

引用:

No.
Read the data from the buffer.

我并不想读数据了,我只是想让他能退出哪个io请求就可以了,否则我的引用程序就会一直在等待,如何做?
而且那个时候也没有数据呀,我能读到什么呢? [/B][/QUOTE]
SubmitUrb不是有一个超时参数吗?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-19 14:33
[QUOTE]原本由 Buddha 发表
[B]Re: Re: 为什么不能超时退出呢?

引用:

No.
Read the data from the buffer.

我并不想读数据了,我只是想让他能退出哪个io请求就可以了,否则我的引用程序就会一直在等待,如何做?
而且那个时候也没有数据呀,我能读到什么呢? [/B]

SubmitUrb不是有一个超时参数吗? [/quote]我也遇到同样的问题,至今还没解决,如果usb设备没有数据,我的应用程序就停在这里了,而且不能退出,用任何杀进程的方法都不能让它退出,只能重启机器,这个高手,请你告诉我,提交urb怎么设置超时啊?我真的快急疯了。。。谢谢你啊。
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-19 15:19
这能在 下位机上想办法。
游客

返回顶部