zoukankan      html  css  js  c++  java
  • (旧文重贴)NetBios的调用中,为什么不同的computer中,ncb指定的cmd的参数不同?而且,结果也不一样?

    我取网卡的mac地址,这么简单一个func,靠,在不同的机器上居然有两种结果?

    很明显,这是一段错误的代码:

     memset(&ncb,0,sizeof(ncb));
     ncb.ncb_command = NCBRESET;
     ncb.ncb_lana_num = 0;
     uRetCode = Netbios(&ncb);
     if(uRetCode)return "";

     memset(&ncb,0,sizeof(ncb));
     ncb.ncb_command = NCBASTAT;
     ncb.ncb_lana_num = 0;
     strcpy(ncb.ncb_callname,(const char*)("* "));
     ncb.ncb_buffer = (char *)&Adapter;
     ncb.ncb_length = sizeof(Adapter);
     uRetCode = Netbios(&ncb);

    而下面这段,才是正确的。为什么?注意看上面的给ncb结构中的ncb_lana_num赋值的地方,直接变成了0。根据我目前的理解和看到的资料,ms扩展了netbios协议后,lana_num的个数与value是与protocol的个数和网卡的个数成正比的。

        memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBENUM;//首先Enum一下

        ncb.ncb_buffer = (unsigned char *) &lana_enum;
        ncb.ncb_length = sizeof(lana_enum);

        uRetCode = Netbios( &ncb );
        if ( uRetCode != 0 ){//Win2k中不一定是从0号开始的!!!
            return "";
        }

     memset(&ncb,0,sizeof(ncb));
     ncb.ncb_command = NCBRESET;//复位后,重新开始
     ncb.ncb_lana_num = lana_enum.lana[0];
     uRetCode = Netbios(&ncb);
     if(uRetCode)return "";

     memset(&ncb,0,sizeof(ncb));
     ncb.ncb_command = NCBASTAT;
     ncb.ncb_lana_num = lana_enum.lana[0];
     strcpy(ncb.ncb_callname,(const char*)("* "));
     ncb.ncb_buffer = (char *)&Adapter;
     ncb.ncb_length = sizeof(Adapter);
     uRetCode = Netbios(&ncb);

    这两段代码,绝大多数情况下,都是后面这段代码正确。可是,上周五在公司一同事机器上,却发现后面这段代码在reset的时候出了错误,返回了一个#符号。why???提交给ms了,让他们帮着看看吧!

    2004年2月9日 9:41

  • 相关阅读:
    [题解]Magic Line-计算几何(2019牛客多校第三场H题)
    [题解]Crazy Binary String-前缀和(2019牛客多校第三场B题)
    [数论]快速幂取模
    [模板]大整数乘法——累加型
    [动态规划] 最大子段和问题
    2073
    17-2-24-D
    17-1-31-C
    2032
    1992
  • 原文地址:https://www.cnblogs.com/juqiang/p/6268.html
Copyright © 2011-2022 走看看