sducwolf
驱动牛犊
驱动牛犊
  • 注册日期2009-01-04
  • 最后登录2016-03-24
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1570回复:2

passthru中PtReceive是用来接收数据包的么???

楼主#
更多 发布于:2009-01-04 20:07
我看资料上是有些是这么写的但为什么在里面收不到包呢??
如下:
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,请指教  谢谢!
eiffle
驱动牛犊
驱动牛犊
  • 注册日期2008-05-22
  • 最后登录2009-03-16
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望62点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-02-11 15:30
网上说是根据网卡的不同而不同的,我以前把PtReceivePacket中return,结果收不到数据包。我现在做了一个过滤发包的。一开始只是在MPSendPacket中过滤,结果在虚拟机(windows xp)中成功过滤了,在实体机上(windows 2003)过不了,后来在MPSend中也加了过滤才成功了。
调试的话用windbg就行了,网上有教程。
zhuizhuziwo
驱动牛犊
驱动牛犊
  • 注册日期2008-09-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-03-02 21:44
PtReceive 和PtReceivePackets 两个函数都可以接收封包的 不同的函数不一样

一般用WinDebug 调试 很方便的
游客

返回顶部