lucy_huiminz
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1631回复:7

关于ptreceive和ptreceivepacket

楼主#
更多 发布于:2003-06-25 10:03
我的网卡本来调用ptreceivepacket,可我把函数中内容修改,改成copy包的形式。后发现网卡调用ptreceive,我实在想不明白,我看了以前老前辈们发的贴子,也没搞清楚。
而且我通过分析包,发现无论出去的包还是回来的包都调用ptreceive,这愈发让我糊涂了,各位大侠来分析分析。

最新喜欢:

blueairblueai...
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-25 10:44
如果
1。你将包的status改为NDIS―STATUS―RESOURCE那么NDIS就调用
protocolreceive函数。
2。如果你将packet的OOB数据去掉,那么NDIS调用protocolreceive
函数。
?????????????????????????????
且我通过分析包,发现无论出去的包还是回来的包都调用ptreceive,这愈发让我糊涂了,各位大侠来分析分析。
???????????????????????????
完全不明白出去的包怎么ptreceive???呢?



放弃瘟草,现吃李草
lucy_huiminz
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-25 11:05
是这样的:
我的机器做服务器,要在别人对我tcp三次连接的第三次利用imd驱动给我的机器发一个rst包,遇到以上问题。
当我转到使用ptreceive中时,发现连网都不能上了,也就是我访问别人访问不了,通过分析发现我发出去的包的rst位被我置1了,可我操作的地方只有ptreceive啊,只能是发出去的包走了ptreceive
所以不理解.
对第一个问题,我只是简单的copy了一下数据,是不是我应该复制一下oob数据啊?

antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-26 21:13
你讲的太粗糙了,
我仔细看了你的描叙,可以看不懂,你的包 的流程,好像你的RST一时是发给自己上层,一时有发给对方
放弃瘟草,现吃李草
jinsin
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2005-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-26 22:40
antspower

你应该禁止lookback。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-26 23:10
是loopback的包。可以丢弃
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
lucy_huiminz
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-27 10:32
各位大侠,分已经给了,什么是loopback包啊?能详细点么?
如何判断这个是loopback包呢?
是不是我发送的时候返回pending 就有这个包呢?
dshadow79
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2006-04-10
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-27 11:39
上层驱动发送一个包,提交给ndis,ndis判断这个包的目的地址,如果包是广播形式(mac的目的地址为0xFFFFFF)或者网卡工作在混杂模式下,就会把这个数据包再提交给上层,就好像是本机收到的数据包一样

你可以在调用ndissend的时候使用这些标志
#ifdef NDIS51
#define SEND_PACKET_FLAGS NDIS_FLAGS_DONT_LOOPBACK
#else
#define NDIS_FLAGS_SKIP_LOOPBACK_W2K 0x00000400
#define SEND_PACKET_FLAGS ( NDIS_FLAGS_DONT_LOOPBACK | NDIS_FLAGS_SKIP_LOOPBACK_W2K )
#endif

2000下有点小bug,所以需要使用未公开的一个标志NDIS_FLAGS_SKIP_LOOPBACK_W2K。

再具体点的看http://ndis.com/papers/loopback.htm,很详细
游客

返回顶部