2btoo
驱动牛犊
驱动牛犊
  • 注册日期2001-11-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:4627回复:25

关于PtReceive和PtReceivePacket

楼主#
更多 发布于:2001-11-21 20:38
各位前辈:

    究竟是调用PtReceive还是PtReceivePacket是由网卡决定的?

    会不会和接收的是什么包有关系?同时MPSend和MPSendPackets我也有这样的疑问。

再有一问:

    我想在发送某一特定类型的包时,将其拦住,同时做一个假的包来欺骗准备接收返回包的应用程序,我先改了发送的包的内容再直接调用PtReceivePacket返回发送的包,结果对应用程序来说没有用,那位前辈给我指条明路!!先谢了!!

最新喜欢:

xiaojian521xiaoji... ljmmaryljmmar... raphyerraphye...
什么也不懂
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-01 12:04
本来就是有两种方式,但如果你的ndis版本很底,那就只有PtReceive了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
longriver2003
驱动小牛
驱动小牛
  • 注册日期2003-09-14
  • 最后登录2005-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-01 11:06
确实经典帖子,我刚巧碰到这几种情况,我的一块RTL8139网卡只能调用ptreceive,而Intel pro/100 网卡则有少量ptreceive的调用,更多的是调用ptreceivepacket.
给分才有动力!所以我坚决给分!
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-02 22:51
很有价值的一贴,需要好好学习。
按第一贴的“给分”键,给分。
tomore
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2003-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-01-07 21:26
请问版主:
当NdisGetReceivedPacket返回null时,如何使用transferdata来得到后续数据?

能不能提供一些源码?
banana
驱动牛犊
驱动牛犊
  • 注册日期2001-07-28
  • 最后登录2001-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-11-27 14:28
To 2bToo:
我自己只有一台机器,我也在MPSEND中仿造PACKET发回去,不过我是自己做一个新的PACKET包,用NDISMINDICATEPACKET()发回去的,注意的是一些CHECKSUM,TIMESTAMP的设置,和一定要先仿造ARP,ICMP应答包,我试过可以接收(仿造了几个以太地址和IP地址,用PING命令执行很好),
不过我不知在哪释放内存(NDIS_BUFFER指向的数据),因为如果在RETURNPACKET()处释放,会当机(并不是马上当机),可能过后NDIS会自动释放,对么?
另外对于自返回的PACKET(127.0.0.1)是不过IM的.

趁着这奈何天,伤怀日,寂寥时,试谴愚衷!
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-11-25 17:18
弄个来给大家参考参考啊!!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
2btoo
驱动牛犊
驱动牛犊
  • 注册日期2001-11-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2001-11-23 13:22
I crack all PCAUSA Sample:)


你指啥?是有PCAUSA所有sample的源码吗?那你牛逼了!  :cool:

[编辑 -  11/23/01 作者: 2btoo]
什么也不懂
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-11-23 13:06
I crack all PCAUSA Sample:)
Taiwan's Driver Developer
jukebox
驱动牛犊
驱动牛犊
  • 注册日期2001-08-25
  • 最后登录2002-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-11-23 12:28
请问胡版主:
headbuffer和lookaheadbuffer是什么关系?
lookaheadbuffer包括headbuffer?

packet里的buffer chain中的第一个buffer是从headbuffer开始,还是lookaheadbuffer开始?

谢谢...
2btoo
驱动牛犊
驱动牛犊
  • 注册日期2001-11-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2001-11-23 10:52
to Top

我看过的包都是有MAC头的,在PtReceivePacket和MPSend里是这样,在MPSendPAckets和PtReceive里也应该是这样吧!
什么也不懂
2btoo
驱动牛犊
驱动牛犊
  • 注册日期2001-11-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2001-11-23 10:49

你自己主机上得到的那个包估计不是过网卡的那个。
回环地址的数据包都不经过网卡的。


我觉得也不是,因为不是我改过的包。我有什么办法能做一个假包返回给本机吗?
什么也不懂
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
12楼#
发布于:2001-11-23 10:41
To Hu大侠

这是一个广播包,要广播出去肯定是要过网卡的丫,我在MPSend里面也可以得到这个包,SoftICE里DbgPrint可以看到这个包的内容。??


你自己主机上得到的那个包估计不是过网卡的那个。
回环地址的数据包都不经过网卡的。
不再回忆从前,我已经生活在幸福当中。
2btoo
驱动牛犊
驱动牛犊
  • 注册日期2001-11-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2001-11-23 08:45
To Hu大侠

这是一个广播包,要广播出去肯定是要过网卡的丫,我在MPSend里面也可以得到这个包,SoftICE里DbgPrint可以看到这个包的内容。??
什么也不懂
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2001-11-22 23:21
首先再次感谢斑竹为我做了如此详细的回答!另外问问这几个函数里的包是不是都没MAC头??
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2001-11-22 22:57
就是没反应

我发的UDP广播包,因为广播本机也有一份,到不了IM就收到一个原包,在MPSend时我返回了发送失败,于是又收到一个原包

我改了以太头,IP头和UDP头没改,端口没错,返回的包可以收到
可是不是我改过的包,两个都是原包。
  


到本机的数据包不过网卡,也不过IMD的MINIPORT。
所以你这样做几乎没戏
不再回忆从前,我已经生活在幸福当中。
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
16楼#
发布于:2001-11-22 22:55
不会吧??我怎么没见调用过ptrecvpacket啊??都是调用ptrecv的啊!可以用dbgprint来论证这点,用改包的方法好象也太麻烦了!要说资源不足我就不理解了!什么情况下才叫资源不足??80%内存被利用?80%CPU被利用?好象和着两个函数的调用没有太直接的关系!在我的机子上就没调用过ptrecvpacket!好奇怪!如果有会输出dbgpring的信息的!我在开机的时候也就是在driverentry的时候就开始断一次!看有什么函数被调用!而且加了个记数来记录他们调用了几次!可以到了最后一次都没!于是我又加了个函数专门统计每个函数的调用次数和次序!可是也没发现ptrecvpacket的调用!现在都蒙了!DDK上面说的是:ptrecvpacket是个可选的函数(就是可要可不要!!),但是ptrecv是必选的函数!!,而且和多包接受有关!于是我打开了mpsnedpackets函数!从此mpsend下岗了(DDK上是这么说的!事实也是!)按道理是该调用ptrecvpacket了?可是又不见它来报到!还是由ptrecv在忙!看来passthru的包的流程真的很乱!不知道谁那还有其他IM驱动的例子?如果能有多个参考可能就容易明白了!希望哪位大虾不吝赠阅!贴在附件里让大家都进步进步!听说有好几个叫IPBLOCK、IMDRV、IMSIMP什么的都是IM的例子,还有许多,不过都是只见雷声不见雨点的东西!一般是要收费的(某某洋网站上的!),不知道谁知道哪有免费的?或哪位能贡献一个??先谢了我这~~~ :)


我来回答你所有的问题:

你没有看到过PTRECEIVEPACKET是因为你没有在不同环境中作过
实验。
RECVPACKET的调用和MPSEND/PACKETS毫无关系。
RECVPACKET还是RECV被调用,关键在于MINIPORT使用
哪个函数INDICATE。你看看PASSTHRU里面的RECV和
RECVPACKET,里面是否有两个INDICATE函数?
一个是INDICATEPACKET,还有一个是介质相关的
ETH/WAN/TOKEN/INDICATEPACKET。
当使用介质无关的INDICATE的时候,一般NDIS会
调用RECVPACKET,否则就是RECV。
前面说一般情况下如此,还有的情况是NDIS_RESOURCE
的情况。当PACKET的STATUS == NDIS_RESOURCE
的时候,NDIS也调用RECV。此外还有网卡的
FILTER设置为PROMISIC/ALL LOCAL等情况时。

RECV和RECVPACKET实际上是有细微差别的。
NDIS内部的内存操作并不相同。

最后说清楚MPSEND/PACKET,并非有了MPSENDPACKETS
MPSEND就会下岗,当网卡本身没有能力一次发多个包
的时候,还是MPSEND。

什么情况才叫资源不足?不是CPU用了多少,也不是
MEMORY用了多少,而是MINIPORT的PACKET_POOL快
用完了,或者NDIS的PACKET_POOL用的太多。

最后一个问题,哪里有FREE的SAMPLE。我个人见解,
PASSTHRU对于理解NDIS5的IMD以及NDIS5来说,是一个
非常好的SAMPLE,关键是要吃透每行代码的意思。
我以前对NDIS3/4理解比较多,没有在意PASSTHRU,
结果对NDIS5的许多特性都没有搞清楚,看过PASSTHRU
之后感觉清楚多了。NT4的IMD到处都找的到,IMSAMP,
JIM MATTER写的。W2K的IMD PCAUSA上有,这个站点上
也有,不过需要高级用户才能下。我大致看了看,没有
发现比PASSTHRU特别的地方。


不再回忆从前,我已经生活在幸福当中。
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
17楼#
发布于:2001-11-22 22:12
to top:
请教两个问题

1.我用driver monitor看passthru,先open driver,再start driver.结果报错Error:The driver is marked as disabled(start=4)in its service database entry.

这里应该修改哪里才能用呢?

2.我用softice调试passthru的时候,在PtReceivePacket里设断点.发现有一些语句不能设断点(单步的时候也跳过去了).
相反,我把NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);这句用//注释掉,重新编译,安装驱动,softice重新装载,这一句居然能够设断点(单步时也能执行)

这是怎么回事?

谢谢


这是因为你的SOFTICE里面LOAD的SYMBOL是老版本的。
你重新生成SYMBOL,然后LOAD。
不再回忆从前,我已经生活在幸福当中。
jukebox
驱动牛犊
驱动牛犊
  • 注册日期2001-08-25
  • 最后登录2002-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2001-11-22 14:17
to 2btoo:
贴出你的相关源码吧,说不清楚了
jukebox
驱动牛犊
驱动牛犊
  • 注册日期2001-08-25
  • 最后登录2002-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2001-11-22 14:06
to top:
请教两个问题

1.我用driver monitor看passthru,先open driver,再start driver.结果报错Error:The driver is marked as disabled(start=4)in its service database entry.

这里应该修改哪里才能用呢?

2.我用softice调试passthru的时候,在PtReceivePacket里设断点.发现有一些语句不能设断点(单步的时候也跳过去了).
相反,我把NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);这句用//注释掉,重新编译,安装驱动,softice重新装载,这一句居然能够设断点(单步时也能执行)

这是怎么回事?

谢谢
上一页
游客

返回顶部