jonathanfoo
驱动牛犊
驱动牛犊
  • 注册日期2003-10-13
  • 最后登录2004-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:854回复:0

应用层超时条件发生,调用CancelIo,然而板卡还在进行数据传输。

楼主#
更多 发布于:2004-03-16 17:40
    应用层需要的数据量比较大,所以,有可能在没有达到需要的数据
量之前,应用层调用CancelIo中止异步IO,我有一些考虑:
1、能否通过调用Cancel例程结束数据传输,并将Cancel例程中的
Irp->IoStatus.Status设为STATUS_CANCELLED,而将Irp->IoStatus.Information
设为已经传输的数据量,然后调用IoCompleteRequest( Irp,IO_NO_INCREMENT);
返回后,从应用层调用GetOverlappedResult来获取Information字段?

2、如果发生Cancel时,有一个内核线程正在运行,将数据从系统空间
复制到用户空间,只有等数据传输完毕后,才可以得到已传输的数据量
的值,在Cancel例程中如何处理这个线程呢?

 
newhand
游客

返回顶部