阅读:1457回复:6
急问有关Passthru的PtSend和MpReceivePacket的问题
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是否包含了帧头? :( |
|
最新喜欢:baoyib... |
沙发#
发布于:2003-06-02 22:52
有哪位好心人指点我一下!我现在挺着急的
|
|
板凳#
发布于: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 ); } |
|
地板#
发布于:2003-06-03 11:20
我指的是以太网帧头
|
|
地下室#
发布于: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就十分重要了。 |
|
5楼#
发布于:2003-06-03 11:39
其实,关键问题是Mac地址表是由谁来维护的。
是Miniport Driver还是NDIS Manager? 另外NIC的Mac Address也应该是由它的Miniport Driver来管理的。 |
|
6楼#
发布于:2003-06-03 13:06
其实,关键问题是Mac地址表是由谁来维护的。 我从passthru中截获的报文都是包含有source addr, dest addr的。 我以前以为这些都是由miniport driver来处理。后来自己打印了这些报文才明白的。 你自己打印一些就都明白了。protocol driver能把报文做到什么程度,miniport 要接着做什么。都会很清楚了。 |
|