XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1457回复:6

急问有关Passthru的PtSend和MpReceivePacket的问题

楼主#
更多 发布于:2003-06-02 20:31
Passthru Sample里面,
NDIS_STATUS
MPSend(
IN NDIS_HANDLE  MiniportAdapterContext,
IN PNDIS_PACKET Packet,
IN UINT      Flags
)
里面Packet是否包含了帧头?
  我DBGPRINT测试发现不断的PING的时候。Packet的大小都是74字节。
说明Packet里为帧头预留了空间,但是否当MPSend被调用时Packet里面
已经包含了帧头呢?如果不是我又如何才能截获完整的帧(Outbound流量里的)?
  同样PTReceivePacket函数里
INT PtReceivePacket(
IN NDIS_HANDLE  ProtocolBindingContext,
IN PNDIS_PACKET Packet
)
Packet是否包含了帧头?


 :(

最新喜欢:

baoyibao99baoyib...
XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-02 22:52
   有哪位好心人指点我一下!我现在挺着急的
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-03 11:07
send和receive不能一概而论。
你指的帧头是什么帧?ethernet的帧头还是ip的帧头?
你可以打印出来自己看看。
NdisQueryPacket( Packet, &PhysicalBufferCount, BufferCount, &pNdisBuffer, &TotalPacketLength );
DbgPrint(\"Passthru: PhysicalBufferCount %d, BufferCount %d, TotalPacketLength %d\\n\", PhysicalBufferCount,BufferCount,TotalPacketLength );
while( pNdisBuffer != NULL ){ NdisQueryBuffer(  pNdisBuffer, &pVirtualAdd, &Length );
DbgPrint(\"Passthru: pVirtual %x, Length %d\\n\", pVirtualAdd, Length );
for( n = 0; n < Length; n++){ DbgPrint(\"%x \", pVirtualAdd[ n ] );
}
DbgPrint(\"\\n\");
NdisGetNextBuffer( pNdisBuffer, &pNdisBuffer );
}
XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-03 11:20
我指的是以太网帧头
XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-03 11:33
一般来说,NDIS_PACKET从Protocol Driver到Miniport Driver时,
NDIS会给NDIS_PACKET保留能保存以太网帧头的位置,因为帧头里需要
保存网络层协议的类型,比如IP,IPX等。

所以MpSend里面收到的作为参数的NDIS_PACKET里面帧头空间已经预留
过了,网络层协议类型的域也附过值了。但是很可能source Mac Addr
和destination Mac Addr就需要Miniport Driver来填写。

所以如果想在IM Driver输出流里想截获链路层的帧(包括完整的source Mac Addr 和destination Mac Addr),那么MpSend里的NDIS_PACKET 参数是否包含了正确的source Mac Addr 和destination Mac Addr就十分重要了。
XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-03 11:39
其实,关键问题是Mac地址表是由谁来维护的。
是Miniport Driver还是NDIS Manager?

另外NIC的Mac Address也应该是由它的Miniport Driver来管理的。
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-03 13:06
其实,关键问题是Mac地址表是由谁来维护的。
是Miniport Driver还是NDIS Manager?

另外NIC的Mac Address也应该是由它的Miniport Driver来管理的。
 

我从passthru中截获的报文都是包含有source addr, dest addr的。
我以前以为这些都是由miniport driver来处理。后来自己打印了这些报文才明白的。
你自己打印一些就都明白了。protocol driver能把报文做到什么程度,miniport 要接着做什么。都会很清楚了。
游客

返回顶部