daisyboy
驱动小牛
驱动小牛
  • 注册日期2002-10-24
  • 最后登录2012-05-21
  • 粉丝3
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值1点
  • 好评度56点
  • 原创分0分
  • 专家分0分
阅读:1844回复:11

新手问个小问题,关于receivehandler!(给5分)

楼主#
更多 发布于:2002-11-06 15:39
据我现在的理解。
protocol中的receviehandler只传送一个数据包,但是receivepackethandler则可能一次传送多个数据包,它们打包在NDIS_PACKET里。

如果这个理解没错的话,想问的是,NDIS_PACKET里的每个数据包都是完整的吗?每个数据包都有包头?不同类型的数据包可能打在一个NDIS_PACKET中吗?怎么遍例每个数据包的包头和数据区?

呵呵,问号多了点。不好意思。:)
合作c/c++/ndis/pppoe/802.1x!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-06 16:02
据我现在的理解。
protocol中的receviehandler只传送一个数据包,但是receivepackethandler则可能一次传送多个数据包,它们打包在NDIS_PACKET里。

如果这个理解没错的话,想问的是,NDIS_PACKET里的每个数据包都是完整的吗?每个数据包都有包头?不同类型的数据包可能打在一个NDIS_PACKET中吗?怎么遍例每个数据包的包头和数据区?

呵呵,问号多了点。不好意思。:)

每个包都是一个完整的包。
每个数据包都有包头.
不可能。
NDIS_GET_PACKET_HEADER_SIZE获得包头大小
我思故我在,脑袋不会坏.
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
板凳#
发布于:2002-11-06 16:30
给分。
daisyboy
驱动小牛
驱动小牛
  • 注册日期2002-10-24
  • 最后登录2012-05-21
  • 粉丝3
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值1点
  • 好评度56点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-06 17:25

每个包都是一个完整的包。
每个数据包都有包头.
不可能。
NDIS_GET_PACKET_HEADER_SIZE获得包头大小


谢谢斑竹。这5分归你了。不过,麻烦再指点一下。

我看了一些分析NDIS_PACKET包的范例,发现它是将各个buffer连起来得到一个整体包。这个整体包的前部分是头,后部分是数据。

那么,是否可以这么理解:
NDIS_PACKET里的各个数据包除了数据不同之外,别的都是相同的(比如包头)。因此,在NDIS_PACKET中只需要记录一个包头,然后将各个数据包的数据罗列在后边就可以了?
合作c/c++/ndis/pppoe/802.1x!
bie_zm
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2002-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-06 19:35
请问 接收到的数据 能修改吗?修改后 上层的调用者是不是接收的是修改后的数据?
  :D
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-06 20:43
packet可以修改,但是该完了只有你的caller能看到你修改后的数据,而其他的协议得到的还是原始数据
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
leepyzh
禁止发言
禁止发言
  • 注册日期2001-04-27
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分3668分
  • 威望18340点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-11-06 22:51
用户被禁言,该主题自动屏蔽!
daisyboy
驱动小牛
驱动小牛
  • 注册日期2002-10-24
  • 最后登录2012-05-21
  • 粉丝3
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值1点
  • 好评度56点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-07 08:45
   我也是同样的问题!
 
    我现在HOOK上了系统的ReceiveHandle函数,即将它替换成了我的函数,我的函数为:
NDIS_STATUS NDIS_API
My_SendPacket(
NDIS_HANDLE MacBindingHandle,
PNDIS_PACKET Packet
)
   我得到这个Packet后,要对它进行加密处理,加密后长度变长了。现在我想把这个Packet替换成我自己的包My_Packet.不知这个包如何构造?
   daisyboy 要改变Packet包,不知是如何实现?多谢告诉我!
 


呵呵,我没有要改变Packet包。只是想了解ReceivePacketHandle是如何工作的。到目前为止,我知道的是,NDIS_PACKET由1~多个buffer组成。你可以把所有这些buffer的数据按顺序Move到一个数组然后在这个数组中,前部分是数据包头,后部分是数据。

我唯一需要确认的就是: 能打成NDIS_PACKET的数据包是否除了数据区可以不同之外,别的信息(比如包头)都是相同的?

因为我没有发现NDIS_PACKET有多个包头。
合作c/c++/ndis/pppoe/802.1x!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-07 09:13
receivepacket每次收到的都是 一个 完整的包,不是多个包,
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
daisyboy
驱动小牛
驱动小牛
  • 注册日期2002-10-24
  • 最后登录2012-05-21
  • 粉丝3
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值1点
  • 好评度56点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-07 09:21
receivepacket每次收到的都是 一个 完整的包,不是多个包,


???? 那它跟receivehanlde接收到的东东有什么区别?

我的理解:当receivehanlde忙不过来的时候(pool满了),操作系统就会把同类的几个包打成一个NDIS_PACKET,发送给receivepackethandle。我的理解有问题吗?
合作c/c++/ndis/pppoe/802.1x!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-07 12:42
ddk里说的是如果miniport传上来的是多个包,那么ndis会调用receivepacket,这时候传的都是完整的包,如果miniport传的是单个包,nids就调用receivehanldler,这时候传的可能是完整的包,也可能不是,不过好像只有老式的网卡会传上来部分包,新的传的都是完整的包。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
daisyboy
驱动小牛
驱动小牛
  • 注册日期2002-10-24
  • 最后登录2012-05-21
  • 粉丝3
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值1点
  • 好评度56点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-07 12:50
已经给分了!:)

gjpland 3

mikeluo 2

合作c/c++/ndis/pppoe/802.1x!
游客

返回顶部