哪位大侠帮帮忙,我用GetIfTable获得的MIB_Iftable结构中信息来判断当前网卡linked状态,以前都一直好好的,不过近来莫名其妙的在一台Vista系统和两台2008系统上出现异常。
异常描述:当前网卡无论是正常链接还是未连接时GetIfTable获得结构中的链接状态信息始终为0,即未链接状态。真实情况网卡是链接的,而且可以正常工作(Ping,传数据等动作)。跪求一解,万分感谢!

解决方案 »

  1.   

    调用GetIfTable部分的代码贴上来看看
      

  2.   

    bool NIC_Info::isCableLinked(std::string strInterface , unsigned char bMacAddr[])
    {
    unsigned long dwsize = 0;
    bool  border = false;
    PMIB_IFTABLE piftable = NULL;
    GetIfTable(piftable, &dwsize, border);
    piftable = (PMIB_IFTABLE)new(unsigned char[dwsize]);
    if (piftable == NULL)
    {
    return false;
    } GetIfTable(piftable, &dwsize, border);
    bool bFind = false;
    unsigned long nIndex = 0;
    bool bLinkStatus = false;
    //search the row with same physical address
    for(; nIndex < piftable->dwNumEntries; nIndex++)
    {
    if( memcmp(&(piftable->table[nIndex].bPhysAddr), bMacAddr, 6) == 0)
    {
    bFind = true;
    break;
    } }
    if(bFind == true)
    {
    bLinkStatus = !(piftable->table[nIndex].dwOperStatus == MIB_IF_OPER_STATUS_NON_OPERATIONAL);
    }
    delete [] piftable; return bLinkStatus;
    }
      

  3.   

    问题可能出在函数实现的逻辑上,可能根本就没有find到相应的bMacAddr单步调试一下看看能不能进入:bFind = true; 
      

  4.   

    逻辑没问题,就是piftable->table[nIndex].dwOperStatus值莫名其妙的等于0了,崩溃ing..... 
      

  5.   

    Vista下GetIfTable可以取到多个同样mac地址的记录,你把所有的记录都输出出来看看