edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1616回复:11

哪位大侠能解释一下 ReceiveHandler() 参数的意义?

楼主#
更多 发布于:2002-07-23 10:16
DDK 的帮助文档里面没有介绍!

NDIS_STATUS NDIS_API
ReceiveHandler(
   NDIS_HANDLE  ProtocolBindingContext,
   NDIS_HANDLE  MacReceiveContext,
   PVOID        HeaderBuffer,
   UINT         HeaderBufferSize,
   PVOID        LookAheadBuffer,
   UINT         LookaheadBufferSize,
   UINT         PacketSize
   )

哪位大侠能给我做个注释,多谢了!!!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-23 10:58
DDK 的帮助文档里面没有介绍!

NDIS_STATUS NDIS_API
ReceiveHandler(
   NDIS_HANDLE  ProtocolBindingContext,
   NDIS_HANDLE  MacReceiveContext,
   PVOID        HeaderBuffer,
   UINT         HeaderBufferSize,
   PVOID        LookAheadBuffer,
   UINT         LookaheadBufferSize,
   UINT         PacketSize
   )

哪位大侠能给我做个注释,多谢了!!!

DDK里有看ProtocolReceive
我思故我在,脑袋不会坏.
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-23 11:22
(1)那么当有数据到达时,NDIS 是调用 ProtocolReceive() 呢还是调用 Protocol 的 ReceiveHandler() 呢?

(2)是不是在理想情况下,PacketSize = HeaderBufferSize + LookaheadBufferSize?
PacketSize 是整个包的尺寸?
LookaheadBufferSize 是当前可以接收的尺寸?
HeaderBufferSize 又是什么呢?如果的包头的话,是以太头还是 IP 头?
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-23 11:46
你用的是什么方法?
passthru?

protocolreceive就是receivehandler

headerbuffer通常是以太头,lookaheadbuffer通常是mac头后的数据,应该包含了ip头,可能是整个数据包,也可能只有ip头,
packetsize是整个包的大小,lookaheadbufersize是告诉你已经有多少数据传上来,理想情况是packetsize =  headerbuffersize + lookaheadbuffersize,
但如果是>,那么就要调用transferdata更获得余下的数据!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-23 12:17
to swift:

非常感谢!这下全明白了。我用的是 NDIS Hook。
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-23 12:29
经常听到有人说起“passthru”,这是个什么东东?DDK 里面的一个例子?是 Miniport Driver 还是 Protocol Driver?可以用来做截包和过滤吗?是不是经常有人拿它来改写以完成任务啊?

还有人补充吗?如果没有就结贴给分了。
fenger_li
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-23 13:20
经常听到有人说起“passthru”,这是个什么东东?DDK 里面的一个例子?是 Miniport Driver 还是 Protocol Driver?可以用来做截包和过滤吗?是不是经常有人拿它来改写以完成任务啊?

还有人补充吗?如果没有就结贴给分了。


?1 好东东
?2 是
?3 都不是
?4 是
?5 是


呵呵!
有点意思。。。 呵呵!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-23 13:33
to fenger_li:

那它是个 IM Driver 吗?如果不是的话,是什么呢?
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-23 13:37
passthru就是IMD应用的一个例子!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-23 13:46
哦,原来如此,不是说 IMD 安装很不方便吗,居然还有很多人在研究(当然功能很强大)。

订正一个错误,免得以后浏览这个帖子的人被误导:
以下来自 DDK 文档:
PacketSize
  Specifies the size, in bytes, of the network packet data. The length of the packet does not include the length of the header.

所以理想状况下,应该是 packetsize = headerbuffersize,如果packetsize > headerbuffersize 就应该调用 TransferData()。
kaput
驱动中牛
驱动中牛
  • 注册日期2002-06-26
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-23 14:10
是不是你的问题有没有说清楚啊。
ddk中是没这个函数的。
ReceiveHandler是NDIS_PROTOCOL_CHARACTERISTICS结构的一个属性,注释为:Specifies the entry point of the caller’s ProtocolReceive function。是在DriverEntry中导出的数据接收函数的句柄。
天下风云出我辈 一入江湖岁月催 鸿图霸业谈笑中 不胜人生一场醉......
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-23 14:19
对,确实没这个函数,我想其实 ReceiveHandler() 和 ProtocolReceive() 就是一个东西。
游客

返回顶部