在看passthru相关资料过程中,对于PtReceivePacket函数接收到一个NDIS_PACKET,调用NdisQueryPacket可以获取第一个NDIS_BUFFER,调用NdisQueryBufferSafe获取Buffer中的网络数据地址,然后调用NdisGetNextBuffer获取下一个NDIS_BUFFER,接着调用NdisQueryBufferSafe获取Buffer中的网络地址,将这些数据拼凑到一起,就获取到了完整的网络数据包,我的问题是,什么情况下一个Packet会分成多个NDIS_BUFFER传送到passthru中呢?我在passthru中添加打印信息,经过一两个小时,发现从来都是一个NDIS_BUFFER就包括了全部数据,是否跟网卡或系统有关系,请大牛们指导
------解决方案--------------------
应该是网卡给网络传输分配的buffer足够大?
可以调用 NdisGetBufferPhysicalArraySize function,看看网卡给对应的Buufer开的Size是多少。
如果你的网络包都比这个size小,是不是一个buffer就会包含全部数据。
如果大文件网络传输都不会触发buffer分包,是不是需要你自己写一个网络通讯程序,分配一个大于这个size的buffer,发给网卡,看看是不是就分包了。