njtlxm
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望28点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1589回复:11

遇到重大难题,请各位拔刀相助!!!!!!!!

楼主#
更多 发布于:2002-07-26 19:44
我用driverstudio的network开发imd层的filter,现在在NDIS_STATUS Test4Adapter::OnReceive
(const KNdisPacket& Original, KNdisPacket& Repackaged)中可以得到完整的数据包,但是在
NDIS_STATUS Test4Adapter::OnReceive(IN OUT KNdisPartialPacket& PacketToAccept, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize)中如何得到啊,ds的帮助和例子我都看了,也没有这方面讲解,在这里也很少有人说到这个部分。不知道有谁知道?能否贴出详细的源码,因为我很菜
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-26 22:23
我没用DS做过IMD,但我想它和passthru应该是一样的,看看passthru的例子就知道了,前面的贴子也有人问过的,为什么会走receivepacket,而不走receive!
我想你的第一个函数就象receivepacket,而第二个就象receive!

找找吧!
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-26 22:32
swift
你好厉害呀。连这都看出来啦!
pfpf
按第一贴的“给分”键,给分。
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-26 22:50

是问得不到包,还是得不到完整的包(不知如何组成)?

后者可能还要用:

NdisTransferData( &Status,
Open->AdapterHandle,
MacReceiveContext,
LookaheadBufferSize,
SizeToTransfer,
pPacketb,
&BytesTransfered);

上传其余的数据。。。。。


 :)
[color=red]大头鬼! :P[/color]
njtlxm
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望28点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-07-27 08:39
我已经看过passthru,而且已经在两个receive中得到完整的数据包(参考hu斑竹的代码)。问题是ds和passthru不同,我现在需要的是ds下的解决方案
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-29 10:14
用什么工具好象没什么区别,方法都是一样的,只要register了你的协议,就应该可以!

你可以先只注册receive,而不注册receivepacket,这样就会走receive了(用你的工具我没试过,不过可以一试)
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2002-07-29 10:22
用什么工具好象没什么区别,方法都是一样的,只要register了你的协议,就应该可以!

你可以先只注册receive,而不注册receivepacket,这样就会走receive了(用你的工具我没试过,不过可以一试)



不用试,肯定是这样。

这里讲receive的流程的贴子不少,耐心找找。

不要迷信driverstudio,我用过这东西之后的感觉是,

非但没有帮助,反而让我迷惑,大量的时间都花在察看

base class的那些函数的源代码了。而且封装之后的一个

大缺点就是你很难不修改driverstudio的lib进行精致的

irql的设置,做高性能的卡驱动,以及高并发高重入的网络

驱动程序的时候,这些库简直是梦魇。

而且driverstudio的那些类,以及成员函数,基本上都是

简单封装,我看不出有什么大的作用。
不再回忆从前,我已经生活在幸福当中。
njtlxm
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望28点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-07-29 10:23
楼上的,好像不行

而且我重载OnTransferDataComplete(),希望在这里拦截住数据包,但是很奇怪,根本就不调用这个函数。

另外,我在passthru的PtTransferComplete函数里设置断点,也很奇怪,虽然进入了PtReceive函数,但是就是不进入PtTransferComplete,这个情况好像和HU在白云上的讲解不一样,哪位知道是为什么?
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-29 10:58
进入了receive,不一定要调用transferdata,如果传上来的数据包是完整的就不会调用!
njtlxm
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望28点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-07-29 11:01
问题是我看到了各个段的长度,可以肯定的是数据包不是完整的
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2002-07-29 13:10
楼上的,好像不行

而且我重载OnTransferDataComplete(),希望在这里拦截住数据包,但是很奇怪,根本就不调用这个函数。

另外,我在passthru的PtTransferComplete函数里设置断点,也很奇怪,虽然进入了PtReceive函数,但是就是不进入PtTransferComplete,这个情况好像和HU在白云上的讲解不一样,哪位知道是为什么?


我上次是怎么讲的?什么地方不一样?

如果ptreceive中packetsize != lookaheadbuffersize,

那么才会调用transfer。

不再回忆从前,我已经生活在幸福当中。
ufo_online
驱动牛犊
驱动牛犊
  • 注册日期2002-04-26
  • 最后登录2004-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-29 16:03
你在PtTransferComplete中设断点试一下。
游客

返回顶部