阅读:1250回复:4
packet中的PacketPeceivePacket何时才被调用???
小弟用softice怎么总是跟踪不到??? ping之不行???
需用怎样的条件才能到之。如ping等??? |
|
|
沙发#
发布于:2002-04-09 21:52
PtReceivePacket是PtReceive的多包版本,PtReceive是必须的,
PtReceivePacket是Optional的,说如果你只注册PtReceive的话, 数据报都会走PtReceive;如果你两个函数都注册的话,当下层 整包或多包向上递的话,会进到PtReceivePacket中,如果下层把 一个数据报分两次向上递的话,只会进到PtReceive中。 好像一般的情况下层都是一个包分两次向上递,我为了简便,一般 都只注册PtReceive,所以没怎么见过进到PtReceivePacket中的情 况,但我为了处理数据包的方便,我的IM向上递包时都是整包向上 递的,这样有个好处是你不需要提供MpTransferData函数。 不知对你可有帮助? |
|
|
板凳#
发布于:2002-04-09 22:34
TonyHuyan大虾:
可否对下一句进一步解释之 ////////// 好像一般的情况下层都是一个包分两次向上递. ////////// think all the same!!! packet中的PacketPeceivePacket何时才被调用??? 怎样的条件下才能跟踪到??? (我已用高强度大数据量测试过!) 小弟还是不明白?望各位大虾指点一二!??? |
|
|
地板#
发布于:2002-04-09 23:52
可能也不能说是一般情况吧,只是我没怎么遇到过而已。
你所说的Packet是协议驱动,如果你看看Passthru, 它是个中层驱动,除了像协议驱动一样要注册ProtocolXxx函数 以外,还要注册MiniportXxx函数,这个你都知道。 如果你看Passthru的话,它什么事情都不做,每当下层有包 往上递,它立即向上提交(调用NdisMEthIndicateReceive),这时常常是下层只提交上来整个数据报的一部分,当下层驱动把整个包都 提交完之后,它告诉Ndis,Ndis会调用你的(Passthru的)PtReceiveComplete,这时你可以告诉再上层的驱动,整个数据报已全部到达(调用NdisMEthIndicateReceiveComplete)。 如果你是整包向上提交的话,则调用NdisMIndicateReceivePacket, 并将其第三个参数填为1(提交包的数量)。 总而言之,当下层调用NdisXxxIndicateReceive时,上层协议驱动进到PtReceive中,当下层调用NdisMIndicateReceivePacket时,如果协议驱动(Packet)支持 PtReceivePacket,则进入其中,否则仍然进入PtReceive中。 这样说可以吗?有说错的地方,敬请指正! |
|
|
地下室#
发布于:2002-04-10 11:29
TonyHuyan大虾:
引用: //////// 总而言之,当下层调用NdisXxxIndicateReceive时,上层协议驱动进到PtReceive中,当下层调用NdisMIndicateReceivePacket时,如果协议驱动(Packet)支持PtReceivePacket,则进入其中,否则仍然进入PtReceive中。 /////// 目前也只能先认为是这样。但不确定!!! packet中的PacketPeceivePacket只是提供给下一层的一个可选的接口,被调用与否取决于下一层。 十分感谢TonyHuyan大虾!!! |
|
|