zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1156回复:3

TimeOut = 死亡兰屏?!!!!! help!

楼主#
更多 发布于:2004-04-01 16:19
我调用api ReadFile 从设备读取数据,如果 device没有数据,应该是返回读到的字节数为0,但是现在device buffer中没有数据时,我的 ReadFile() 一直没有返回,一直在等待.
我该怎样做才能中止读的动作,返回0byte.
NTSTATUS status = IoCallDriver( dx->NextStackDevice, Irp);
if (status == STATUS_PENDING)
{
status = KeWaitForSingleObject( &event, Suspended, KernelMode, FALSE, NULL);
status = IoStatus.Status;
}

但当我在KeWaitForSingleObject中的最后一个参数上使用TimeOut
参数后,就会死亡兰屏?

怎么解决????



[编辑 -  4/1/04 by  zzq191]

[编辑 -  4/1/04 by  zzq191]
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-01 17:14
首先你要用异步模式的,然后在应用程序里readfile的最后一个参数用overlap标志,发送后使用GetOverlappedResult函数查询irp完成情况,如果一定时间内不返回就用函数CancelIo()取消请求就行了。
small
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2005-03-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-02 07:30
老大,他这个程序可不是应用层的程序呀
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-02 08:40
驱动程序里是不允许像他那样设置超时的!除非再建立一个event。
游客

返回顶部