阅读:1675回复:2
passthru中PtReceive是用来接收数据包的么???
我看资料上是有些是这么写的但为什么在里面收不到包呢??
如下: NDIS_STATUS PtReceive( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookAheadBufferSize, IN UINT PacketSize ) { PADAPT pAdapt = (PADAPT)ProtocolBindingContext; PNDIS_PACKET MyPacket, Packet = NULL; NDIS_STATUS Status = NDIS_STATUS_SUCCESS; if ((!pAdapt->MiniportHandle) || (pAdapt->MPDeviceState > NdisDeviceStateD0)) { Status = NDIS_STATUS_FAILURE; } else do { // // Get at the packet, if any, indicated up by the miniport below. // DbgPrint("I am in PtReceive else do\n"); //、标识程序是否运行到此处 Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext); if (Packet != NULL) { // // The miniport below did indicate up a packet. Use information // from that packet to construct a new packet to indicate up. // MPCpyAllPacket(&Packet, 1); //该函数是用来解析一个数据包并将其MAC打印出来的函数 DbgPrint("I am in PtReceive if packet != NULL\n"); //该句只是标识程序是否运行到此处……………… 在上面代码中通过dbviewer进行调试可以发现 DbgPrint("I am in PtReceive else do\n"); 会被执行 DbgPrint("I am in PtReceive if packet != NULL\n"); 很少被执行 只有广播报文能触发该语句被执行 我想问题一下 Passthru程序中接收到的数据包在哪个函数中处理? 如果我想处理该怎么办 我现在只要求能够将抓到的包打印出来即可。 另再询问一下 各位大侠 在NDIS编程的时候 是如何调试的 都使用什么工具?? 刚接触NDIS,请指教 谢谢! |
|
沙发#
发布于:2009-02-11 15:30
网上说是根据网卡的不同而不同的,我以前把PtReceivePacket中return,结果收不到数据包。我现在做了一个过滤发包的。一开始只是在MPSendPacket中过滤,结果在虚拟机(windows xp)中成功过滤了,在实体机上(windows 2003)过不了,后来在MPSend中也加了过滤才成功了。
调试的话用windbg就行了,网上有教程。 |
|
板凳#
发布于:2009-03-02 21:44
PtReceive 和PtReceivePackets 两个函数都可以接收封包的 不同的函数不一样
一般用WinDebug 调试 很方便的 |
|