guocaijian
驱动牛犊
驱动牛犊
  • 注册日期2005-04-06
  • 最后登录2006-02-15
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望21点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2188回复:8

passthru例子的全包接收,ReadFile ,异步?

楼主#
更多 发布于:2005-06-25 00:45
  DDK的passthru例子的全包接收,是不是应用程序调用ReadFile 假如没有数据就不返回,有了才返回,也就是在驱动里完成IRP,让IRP返回?例子里的ReadFile是用异步的吗?可以用同步吗?都是不返回等待,有区别吗?
 我的目的是实现数据到来自动接收,也就是驱动程序主动与应用程序通信,我是否可参考passthru,?一开始调用ReadFile在接收端等着,让相应的IRP为pending,有数据来才完成这个IRP,让它返回,让ReadFile返回?.这样我就不用花时间去学事件通知机制,回调函数了.这样对吗?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-25 10:23
passthru的例子程序里没有应用程序与驱动程序,通过ReadFile读包的代码,你的想法是对的,你可以参考ndisuio的例子,它采用的是就是同步ReadFile的方式,这样就不需要事件通知机制了。
guocaijian
驱动牛犊
驱动牛犊
  • 注册日期2005-04-06
  • 最后登录2006-02-15
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望21点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-25 11:27
不好意思我说错了,确实不是passthru,我看的是2000DDK的协议驱动例子packet猜想和XP_DDK的ndisuio差不多吧?用的是ReadFile 同步,但不明白它为什么用到overlapped参数,不 是异步才用吗?
 是不是数据不来,ReadFile 就不返回,相当于一个函数没执行完。(同步)
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-06-25 12:18
packet应用程序部分用的是异步处理,ndisuio应用程序部分用的是同步处理,都可以。
驱动部分代码差不多,都是先返回pending,有包的时候再用IoComplete完成这个irp。
guocaijian
驱动牛犊
驱动牛犊
  • 注册日期2005-04-06
  • 最后登录2006-02-15
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望21点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-25 13:22
哦哦哦!!!!
guocaijian
驱动牛犊
驱动牛犊
  • 注册日期2005-04-06
  • 最后登录2006-02-15
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望21点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-25 13:26
那可以用一个线程来设一个死循环来不断读(一旦返回就开始下一个读)就能实现循环无限的发送接收了没错吧?(我试看)
guocaijian
驱动牛犊
驱动牛犊
  • 注册日期2005-04-06
  • 最后登录2006-02-15
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望21点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-25 16:46
zhaock建议下,我大概学习了ndisuio,应用程序里面有一步连续循环读ReadFile的地方,它是同步的,是不是一个返回了才开始下一个读?所以驱动里的管理有关读的一个双连表是不是每一时间只可能有一个元素在里面,哪还有必要用连表队列呢?//
        //  Add this IRP to the list of pended Read IRPs
        //
        NUIO_INSERT_TAIL_LIST(&pOpenContext->PendedReads, &pIrp->Tail.Overlay.ListEntry);
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2005-06-26 21:57
如果只有一个线程在读,确实可以不用排队
guocaijian
驱动牛犊
驱动牛犊
  • 注册日期2005-04-06
  • 最后登录2006-02-15
  • 粉丝0
  • 关注0
  • 积分137分
  • 威望21点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-06-26 22:41
哦,原来如此!!

zhaock连连给我回复,热心啊,在此致以谢意!!!!
游客

返回顶部