阅读:1727回复:8
ntddk例子,testapp为什么发送5个packet给packet驱动?
搞不明白为什么发送这么多packet给核心?我看到老胡的例子好像packet的数目还要多。
哪位大虾能讲一下或者哪里有这方面的介绍?好像ddk里面没有讲这东西啊! |
|
|
沙发#
发布于:2002-08-23 15:39
他只是示范一下如何发送以太帧吧?
|
|
板凳#
发布于:2002-08-23 16:03
唉,总算有人回答了。谢谢fracker。
我看到ntddk中的packet例子(应用层与核心层通信),在应用层程序packet32.c中有#define NUMBER_OF_PACKETS_TO_SEND 5,我很纳闷为什么发送5个IRP packet呢? 后来,拜读胡老大的“驱动程序怎样和应用程序通信”,他在应用层使用了32次readfile,更加迷惑。 |
|
|
地板#
发布于:2002-08-23 17:05
你用一个抓报程序,抓一下正常的arp报,研究一下。可能对理解这个有帮助。
|
|
|
地下室#
发布于:2002-08-23 17:21
老胡的东西我没有读过,但是packet我是知道的,那里面只是广播一个以太帧(把目标主机MAC地址全部社成FF,就是广播),没有别的意思,只是演示发送以太帧,你用抓包程序在别的机器上抓一下,就可以看到你在这台机器上发送出去的这几个包。
|
|
5楼#
发布于:2002-08-23 19:02
唉,总算有人回答了。谢谢fracker。 32只是一个我喜欢的值而已,你没有搞懂我那段代码真正的 含义。有的时候我用64,有的时候我用16。 32只是为了保证在核心驱动程序永远都有irp,这样不会丢包。 想想这种情况: 在核心层处理完成了一个irp,应用层正在处理这个返回, 此时,卡来了一个中断,表示来了一个数据,核心层立即 进入ISR,进入isr之后判断当前是否有irp在队列中,如果 没有,立即返回,如果有,调用iorequestdpc。如果我不 一次调用多个readfile,就会在应用层发送两次irp之间丢失 数据。 一次调用多个,只不过是异步机制下的一种常规做法而已, 这样才能保证不丢失数据。如果你只需要调用2次,你也可以 用我提供的代码,只要closehandle,系统会cancelirp。 因此不会有dummy irp存在的。 |
|
|
6楼#
发布于:2002-08-23 19:09
唉,总算有人回答了。谢谢fracker。 是5。 是32。 没特别的呀。 :o |
|
|
7楼#
发布于:2002-09-29 18:37
老胡,你用的是ReadFile,为什么没有使用ReadFileEx,应用层用完成IO或告警IO啊??? 我以前的经验是ReadFile在遇到大包时要丢的! |
|
|
8楼#
发布于:2002-09-30 12:37
:P :P :P
|
|