smallbarrow
驱动小牛
驱动小牛
  • 注册日期2002-06-05
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1655回复:8

ntddk例子,testapp为什么发送5个packet给packet驱动?

楼主#
更多 发布于:2002-08-23 10:59
搞不明白为什么发送这么多packet给核心?我看到老胡的例子好像packet的数目还要多。
哪位大虾能讲一下或者哪里有这方面的介绍?好像ddk里面没有讲这东西啊!
嗒嗒的,是那马蹄 是我的心声 别了 一瞬间的花朵
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-08-23 15:39
他只是示范一下如何发送以太帧吧?
smallbarrow
驱动小牛
驱动小牛
  • 注册日期2002-06-05
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-08-23 16:03
唉,总算有人回答了。谢谢fracker。

我看到ntddk中的packet例子(应用层与核心层通信),在应用层程序packet32.c中有#define NUMBER_OF_PACKETS_TO_SEND 5,我很纳闷为什么发送5个IRP packet呢?

后来,拜读胡老大的“驱动程序怎样和应用程序通信”,他在应用层使用了32次readfile,更加迷惑。
嗒嗒的,是那马蹄 是我的心声 别了 一瞬间的花朵
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-23 17:05
你用一个抓报程序,抓一下正常的arp报,研究一下。可能对理解这个有帮助。
按第一贴的“给分”键,给分。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地下室#
发布于:2002-08-23 17:21
老胡的东西我没有读过,但是packet我是知道的,那里面只是广播一个以太帧(把目标主机MAC地址全部社成FF,就是广播),没有别的意思,只是演示发送以太帧,你用抓包程序在别的机器上抓一下,就可以看到你在这台机器上发送出去的这几个包。
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2002-08-23 19:02
唉,总算有人回答了。谢谢fracker。

我看到ntddk中的packet例子(应用层与核心层通信),在应用层程序packet32.c中有#define NUMBER_OF_PACKETS_TO_SEND 5,我很纳闷为什么发送5个IRP packet呢?

后来,拜读胡老大的“驱动程序怎样和应用程序通信”,他在应用层使用了32次readfile,更加迷惑。


32只是一个我喜欢的值而已,你没有搞懂我那段代码真正的
含义。有的时候我用64,有的时候我用16。

32只是为了保证在核心驱动程序永远都有irp,这样不会丢包。

想想这种情况:
在核心层处理完成了一个irp,应用层正在处理这个返回,
此时,卡来了一个中断,表示来了一个数据,核心层立即
进入ISR,进入isr之后判断当前是否有irp在队列中,如果
没有,立即返回,如果有,调用iorequestdpc。如果我不
一次调用多个readfile,就会在应用层发送两次irp之间丢失
数据。

一次调用多个,只不过是异步机制下的一种常规做法而已,
这样才能保证不丢失数据。如果你只需要调用2次,你也可以
用我提供的代码,只要closehandle,系统会cancelirp。
因此不会有dummy irp存在的。

不再回忆从前,我已经生活在幸福当中。
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-23 19:09
唉,总算有人回答了。谢谢fracker。

我看到ntddk中的packet例子(应用层与核心层通信),在应用层程序packet32.c中有#define NUMBER_OF_PACKETS_TO_SEND 5,我很纳闷为什么发送5个IRP packet呢?

后来,拜读胡老大的“驱动程序怎样和应用程序通信”,他在应用层使用了32次readfile,更加迷惑。


是5。

是32。

没特别的呀。





 :o
[color=red]大头鬼! :P[/color]
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-09-29 18:37

32只是一个我喜欢的值而已,你没有搞懂我那段代码真正的
含义。有的时候我用64,有的时候我用16。

32只是为了保证在核心驱动程序永远都有irp,这样不会丢包。

想想这种情况:
在核心层处理完成了一个irp,应用层正在处理这个返回,
此时,卡来了一个中断,表示来了一个数据,核心层立即
进入ISR,进入isr之后判断当前是否有irp在队列中,如果
没有,立即返回,如果有,调用iorequestdpc。如果我不
一次调用多个readfile,就会在应用层发送两次irp之间丢失
数据。

一次调用多个,只不过是异步机制下的一种常规做法而已,
这样才能保证不丢失数据。如果你只需要调用2次,你也可以
用我提供的代码,只要closehandle,系统会cancelirp。
因此不会有dummy irp存在的。

 

老胡,你用的是ReadFile,为什么没有使用ReadFileEx,应用层用完成IO或告警IO啊???
我以前的经验是ReadFile在遇到大包时要丢的!
一剑西来,天外飞仙
xuyonjin
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2008-07-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-09-30 12:37
 :P :P :P
游客

返回顶部