阅读:1670回复:2
NDIS中为什么没有NdisEthSend这样的函数?
各位:
在NDIS函数库中存在媒介相关的指示函数NDISM...INDICATERECEIVE,这个函数中它到底做了什么事情? 假如仅仅是将参数传递到上一层,为什么不将所有的NdisM..IndicateReceive综合成NdisMIndicateReceive? 还有: NdisSend为什么没有一些媒介相关的函数,而仅仅是它一个? 望各位能发表自己的看法! |
|
沙发#
发布于:2002-03-17 21:23
各位: 第一个问题。因为这两者的参数不一样。 介质相关函数没有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知道它应该怎么发送数据。 |
|
|
板凳#
发布于:2002-03-18 08:46
谢谢版主!分已经送出!
|
|