(旧文重贴)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

转载于:https://www.cnblogs.com/juqiang/archive/2004/04/16/6268.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值