mister
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2013-02-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望26点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1605回复:2

NDIS中为什么没有NdisEthSend这样的函数?

楼主#
更多 发布于:2002-03-16 17:22
各位:

    在NDIS函数库中存在媒介相关的指示函数NDISM...INDICATERECEIVE,这个函数中它到底做了什么事情?
假如仅仅是将参数传递到上一层,为什么不将所有的NdisM..IndicateReceive综合成NdisMIndicateReceive?

还有:
NdisSend为什么没有一些媒介相关的函数,而仅仅是它一个?

望各位能发表自己的看法!
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2002-03-17 21:23
各位:

    在NDIS函数库中存在媒介相关的指示函数NDISM...INDICATERECEIVE,这个函数中它到底做了什么事情?
假如仅仅是将参数传递到上一层,为什么不将所有的NdisM..IndicateReceive综合成NdisMIndicateReceive?

还有:
NdisSend为什么没有一些媒介相关的函数,而仅仅是它一个?

望各位能发表自己的看法!


第一个问题。因为这两者的参数不一样。
介质相关函数没有NDIS_PACKET,上传的是RAW DATA。
为什么不合并,理由如下:
1、历史遗留问题。ndis3没有ndismindicaterecievpacket,
那个时候是一定要调用ndistransferdata的。
2、有些数据包没有oob data,或者网络接口不支持,所以,
不需要构建一个ndis_packet结构。
3、在慢速网络接口设备,例如33.6或者19.2k的moden,
ndisXXXindicatepacket+ndistransferdata的方法比
ndisindicatereceivepacket的效率高。
4、为什么为不同的介质需要不同的函数?
例如ndiseth/wan/tok/fddi/xxxxx
因为不同的介质的头长度是不一样的,raw data中没有
headsize信息。协议层当然勉强可以判断,但是很显然不安全,
不符合分层原则。
5、增加写imd的难度,ms提供了passthru之后觉得不能侮辱程序员的
智力。于是让程序员痛苦的修改passthru sample中的ptreceive函
数,让他们自己去增加ndistransferdata的调用:-)。


第二个问题:
ndissend在你的开发环境中只是一个宏,其实是调用了
miniporthandle->sendhandle。这个函数是miniport driver
注册的时候登记的。miniport知道它应该怎么发送数据。
不再回忆从前,我已经生活在幸福当中。
mister
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2013-02-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望26点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-18 08:46
谢谢版主!分已经送出!
游客

返回顶部