(旧文重贴)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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?