阅读:1841回复:5
passthru中PtReceive收到的数据包全是向外的广播包
RT
对passthru中PtReceive所作的改动仅是添加了一个PacketCapture函数,其原型为 NDIS_STATUS PacketCapture(PNDIS_PACKET packet) { NDIS_STATUS status ; PNDIS_BUFFER NdisBuffer ; UINT copysize = 0 , DataOffset = 0 ,i=0; PUCHAR mybuffer = NULL ,tembuffer = NULL ; //假设这个是在PtReceive等函数中得到的PACKET NdisBuffer = packet->Private.Head ; //取得第一个BUFFER status = NdisAllocateMemoryWithTag(&mybuffer, 2048, TAG); //分配内存块 if( status != NDIS_STATUS_SUCCESS ) return NDIS_STATUS_FAILURE ; NdisZeroMemory( mybuffer, 2048 ) ; NdisQueryBufferSafe( //取得NDIS_BUFFER描述符中数据的首地址和大小 NdisBuffer, &tembuffer, ©size, NormalPagePriority ) ; //将数据复制到内存中 NdisMoveMemory(mybuffer, tembuffer, copysize) ; DataOffset = copysize ; while(1) { NdisGetNextBuffer(NdisBuffer , &NdisBuffer ) ; //获得下一个NDIS_BUFFER的的指针 if( NdisBuffer == NULL ) //如果指针是NULL那么表示到链表尾了 break ; NdisQueryBufferSafe( NdisBuffer, &tembuffer, ©size, NormalPagePriority ) ; NdisMoveMemory( mybuffer + DataOffset , tembuffer, copysize) ; DataOffset += copysize ; } for(i=1;i<=DataOffset;i++) { if(mybuffer[i-1]<16) DBGPRINT(("0")); DBGPRINT(("%x ",mybuffer[i-1])); if(i%8==0) DBGPRINT((" ")); if(i%16==0) DBGPRINT(("\n")); } NdisFreeMemory(mybuffer, 2048, 0); return NDIS_STATUS_SUCCESS; } 在vmware下的windowsxp中用driverstudio捕捉到的数据包均是目的地址全为1的广播包 有大牛知道这是为什么吗? |
|
沙发#
发布于:2012-03-15 22:09
我也跟你一样啊! 都到这步了。真希望有高手来帮助一下啊。。。
|
|
板凳#
发布于:2012-03-16 11:53
|
|
地板#
发布于:2012-03-17 10:59
还没人来解答啊 还是说就我和2楼弄错了什么啊 自己顶一个先 接着等!
|
|
地下室#
发布于:2012-03-18 17:49
|
|
5楼#
发布于:2012-03-27 18:39
抓PtReceivePacket例程的包
|
|
|