(旧文重贴)NetBios的调用中,为什么不同的computer中,ncb指定的cmd的参数不同?而且,结果也不一样?
2004-04-16 13:18
465 查看
我取网卡的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
很明显,这是一段错误的代码:
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
相关文章推荐
- 利用默认参数跑相同的数据为什么用sklean的svm.SVC和libsvm结果不同
- 为什么要用二级指针参数才能获得正确的结果
- 第十周项目一 阅读下面的定义,请说出在测试函数中不同情况的调用产生的结果(5 c)
- ko.mapping.fromJS不同参数导致的不同结果
- VS调用CMD(或外部程序)传递参数
- 关于同一个文件两次调用CDC切片的结果不同的问题
- Java程序和Oracle数据库调用相同的SQL查询语句,结果却不同
- Flex通过RemoteObject调用java实例:flex传入参数以及接收java返回结果
- 标准库c++ string,转c string容易犯的一个错误。求此问题为什么在windows下和linux下结果不同???
- 在方法内获取调用此方法参数(指定获得注解的值)
- 调用存储过程中的输出参数必须指定参数方向
- 使用指针类型参数和使用指针引用类型参数在函数内部用new给参数分配空间的不同结果
- 通过C++程序调用cmd并进入指定路径
- 为什么JVM指定-Xmx参数后占用内存会变少?
- 第十周项目一 阅读下面的定义,请说出在测试函数中不同情况的调用产生的结果(5 d)
- Oracle EBS R12 - 查询同一个表在不同用户下的同义词(XLA_TRANSACTION_ENTITIES)时返回的结果不一样
- 程序调用CMD&输出重定向到指定文件
- scrapy如何针对不同的spider指定不同的参数
- 第十一周项目—阅读程序,说出在测试函数中不同情况的调用产生的结果(5 a)
- VS中为什么不同的项目类型属性查看和设置的界面不一样