阅读:1712回复:3
问,PtReceive和PtReceivePacket到底有什么区别啊?
我看贴子说接收数据的话:
接收: PtReceive PtReceiveComplete 接收: PtReceivePacket MPReturnPacket 这是什么意思。代表2种接收数据的方法吗? ReceiveHandler 这是一个必须提供的函数。ProtocolReceive函数以指向包含网络接收数据的前视缓冲区的指针为参数被调用执行。如果该缓冲区包含的不是完整的网络数据包,ProtocolReceive以数据包描述符作为参数,调用NdisTransferData接收该数据包的剩余部分。如果低层驱动程序调用NdisMIndicateReceivePacket指示接收数据包,那么传给ProtocolReceive函数的前视缓冲区将总是完整的网络数据包。 ReceivePacketHandler 这是一个可选函数。如果中间层驱动程序所基于的NIC驱动程序指示的是数据包描述符指针数组,或者调用NdisMIndicateReceivePacket函数指示接收带外数据,那么驱动程序应提供ProtocolReceivePacket函数。如果开发者不能确定中间层驱动程序的执行环境,也应提供函数,因为在能够产生多包指示的低层NIC驱动程序上,中间层驱动程序将获得更好的性能。 前视缓冲区是什么啊?我到现在对网卡的整个工作过程还不是很明白了。 比如我访问某个ASP网页。 打如地址后。经过一系列的变换,最后是通过SendHandler(还是SendPacketsHander)函数将把发送到NIC? 然后网卡接收到数据以后。产生一个中断? 然后IE层层下调。,然后通过Receive(还是ReceivePacket??) 来接受数据? 我这样的想法对吗?? 具体到底是怎么一会事啊!请大家指教。 |
|
最新喜欢:xiaoji... |
沙发#
发布于:2005-02-19 14:57
再贴点我找到的区别,请大家多发表意见啊!
ProtocolReceive这个函数是在低层面向无连接的NIC驱动程序调用NdisMXxxIndicateReceive 函数向上Indicate数据包时被 NDIS 调 用 的。 同 时 传 递 了 一 个 LookAheadBuffer,但 这个LookAheadBuffer 里 面 可 能 不 是 数 据 包 的 全 部 内 容, 如果不是的话 (LookAheadBufferSize < PacketSize)则需要调用NdisTransferData来获得这个数据包其余的内容,NdisTransferData只是传递在LookaheadBuffer中没有出现的数据内容, 不是传递整个数据包。 因为protocolreceive只是上传一个 指针,协议不能修改数据内容,这些数据是所有协议共享的, 协议如果要修改内容,必须自己分配。如果是protocolrecievpacket 那么协议得到的数据是一份copy,所以可以理解当内存不 太多的时候,ndis选择protocolreceive而不是 protoclreceivepacket |
|
板凳#
发布于:2005-02-19 14:59
还有
在底层网卡驱动调用介质相关函数(NdisMXxxIndicateReceive)向上指示 数 据 包 时,如 果 LookAheadBuffer 中不包括全部数据,协议驱动会调用 NdisTransferData 来获得其余的数据, 如果 NdisTransferData 返回PENDING,则这个函数会在传输完成后自动被调用。 由于在 PtReceive 中没有采用介质相关函数(NdisMXxxIndicateReceive)向上指示数据包,而 是用 NdisMIndicateReceivePacket,所以上层协议(tcp/ip等)不会调用 NdisTransferData, 因此这个函数不会被自动调用。 |
|
地板#
发布于:2005-02-21 10:52
装上passthru之后。PtReceive,就一个劲的运行。
为什么把passthru装上之后,系统就开始变慢,网页也不大打的开了。 还有我在PtOpenAdapter,设置了断点。怎么不断啊!!! 最后,访问网页出现的问题就是这个论坛上不了。别的网页倒能开。 (passthru卸了就行) |
|