阅读:1843回复:11
新手问个小问题,关于receivehandler!(给5分)
据我现在的理解。
protocol中的receviehandler只传送一个数据包,但是receivepackethandler则可能一次传送多个数据包,它们打包在NDIS_PACKET里。 如果这个理解没错的话,想问的是,NDIS_PACKET里的每个数据包都是完整的吗?每个数据包都有包头?不同类型的数据包可能打在一个NDIS_PACKET中吗?怎么遍例每个数据包的包头和数据区? 呵呵,问号多了点。不好意思。:) |
|
|
沙发#
发布于:2002-11-06 16:02
据我现在的理解。 每个包都是一个完整的包。 每个数据包都有包头. 不可能。 NDIS_GET_PACKET_HEADER_SIZE获得包头大小 |
|
|
板凳#
发布于:2002-11-06 16:30
给分。
|
|
地板#
发布于:2002-11-06 17:25
谢谢斑竹。这5分归你了。不过,麻烦再指点一下。 我看了一些分析NDIS_PACKET包的范例,发现它是将各个buffer连起来得到一个整体包。这个整体包的前部分是头,后部分是数据。 那么,是否可以这么理解: NDIS_PACKET里的各个数据包除了数据不同之外,别的都是相同的(比如包头)。因此,在NDIS_PACKET中只需要记录一个包头,然后将各个数据包的数据罗列在后边就可以了? |
|
|
地下室#
发布于:2002-11-06 19:35
请问 接收到的数据 能修改吗?修改后 上层的调用者是不是接收的是修改后的数据?
:D |
|
5楼#
发布于:2002-11-06 20:43
packet可以修改,但是该完了只有你的caller能看到你修改后的数据,而其他的协议得到的还是原始数据
|
|
|
6楼#
发布于:2002-11-06 22:51
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2002-11-07 08:45
我也是同样的问题! 呵呵,我没有要改变Packet包。只是想了解ReceivePacketHandle是如何工作的。到目前为止,我知道的是,NDIS_PACKET由1~多个buffer组成。你可以把所有这些buffer的数据按顺序Move到一个数组然后在这个数组中,前部分是数据包头,后部分是数据。 我唯一需要确认的就是: 能打成NDIS_PACKET的数据包是否除了数据区可以不同之外,别的信息(比如包头)都是相同的? 因为我没有发现NDIS_PACKET有多个包头。 |
|
|
8楼#
发布于:2002-11-07 09:13
receivepacket每次收到的都是 一个 完整的包,不是多个包,
|
|
|
9楼#
发布于:2002-11-07 09:21
receivepacket每次收到的都是 一个 完整的包,不是多个包, ???? 那它跟receivehanlde接收到的东东有什么区别? 我的理解:当receivehanlde忙不过来的时候(pool满了),操作系统就会把同类的几个包打成一个NDIS_PACKET,发送给receivepackethandle。我的理解有问题吗? |
|
|
10楼#
发布于:2002-11-07 12:42
ddk里说的是如果miniport传上来的是多个包,那么ndis会调用receivepacket,这时候传的都是完整的包,如果miniport传的是单个包,nids就调用receivehanldler,这时候传的可能是完整的包,也可能不是,不过好像只有老式的网卡会传上来部分包,新的传的都是完整的包。
|
|
|
11楼#
发布于:2002-11-07 12:50
已经给分了!:)
gjpland 3 mikeluo 2 |
|
|