关于Enum局域网中的机器
来源:互联网 发布:pcb设计软件 中文 编辑:程序博客网 时间:2024/06/05 08:59
好不容易考完了,打算把很久以前就想写的一个小东西写出来,其实就是一个局域网内的聊天工具,原因很单纯:我的哥们有时想相互问个问题,又不想用Messenger(其实是不想被从游戏中弹出来),所以这个任务就落到了我的头上,同时练练手,好久没有编程了,因为考试。
其中用到了一个Enum局域网中的机器的程序,本来用WNetOpenEnum和WNetEnumResource就可以实现的,于是我写了这么一个东西:
bool CLANViewer::EnumHosts(NETRESOURCE* pNetRes)
{
HANDLE hEnum = NULL;
DWORD dwRet= WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, pNetRes, &hEnum);
if (dwRet != NO_ERROR) return false;
NETRESOURCE* pResBuf = new NETRESOURCE[8];
DWORD cCount, dwBuf = 8*sizeof NETRESOURCE;
cCount = (DWORD)-1;
do {
dwRet = WNetEnumResource(hEnum, &cCount, (LPVOID)pResBuf, &dwBuf);
for (DWORD i = 0; i < cCount; ++i) {
AddHostToVector(&pResBuf[i]);
}
if(pResBuf[i].dwUsage & RESOURCEUSAGE_CONTAINER)
EnumHosts(&pResBuf[i]);
if (dwRet == ERROR_NO_MORE_ITEMS) { //Enum finished.
dwRet = NO_ERROR;
break;
}else if (dwRet != NO_ERROR)
break;
}while (dwRet == NO_ERROR);
delete pResBuf;
return (dwRet == NO_ERROR);
}
这个东东在Win2K下跑得很好,但是在WinXP下跑不出来,我后来跟踪了一下,发现在Win2K下程序进行Enum是直接就得到了所有的计算机明,但是在WinXP下则会先得到一个东东是“Resource Container”,也就是说dwUsage为RESOURCEUSAGE_CONTAINER,注意看我用黄色底子标出的部分:在进行第一次递归后,While循环回去,再次调用WNetEnumResource,但是这时cCount已经有了一个正值(上次调用返回的),因此调用失败,当然跑不出来。
改正很简单:把那句话移到循环内就可以了。程序如下:
bool CLANViewer::EnumHosts(NETRESOURCE* pNetRes)
{
HANDLE hEnum = NULL;
DWORD dwRet= WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, pNetRes, &hEnum);
if (dwRet != NO_ERROR) return false;
NETRESOURCE* pResBuf = new NETRESOURCE[8];
DWORD cCount, dwBuf = 8*sizeof NETRESOURCE;
do {
cCount = (DWORD)-1;
dwRet = WNetEnumResource(hEnum, &cCount, (LPVOID)pResBuf, &dwBuf);
for (DWORD i = 0; i < cCount; ++i) {
AddHostToVector(&pResBuf[i]);
}
if(pResBuf[i].dwUsage & RESOURCEUSAGE_CONTAINER)
EnumHosts(&pResBuf[i]);
if (dwRet == ERROR_NO_MORE_ITEMS) { //Enum finished.
dwRet = NO_ERROR;
break;
}else if (dwRet != NO_ERROR)
break;
}while (dwRet == NO_ERROR);
delete pResBuf;
return (dwRet == NO_ERROR);
}
在XP和2K下都跑出来的。
- 关于Enum局域网中的机器
- 关于java中的Enum类型
- 关于java中的枚举enum
- 关于py中的枚举类 enum
- 关于ENUM
- 命令行登录局域网中的机器(windows中)
- 将局域网中的机器添加到一个工作组中
- 用Admin而不是来宾的方式登陆局域网中的机器
- 局域网中的所有机器都能连接MySQL数据库
- 关于机器学习中的规则化
- 关于机器学习中的一些数学方法
- 关于机器学习中的概率问题
- 关于机器学习中的矩阵范数问题
- 关于机器学习中的梯度下降
- 关于机器学习在密码学中的应用
- C/C++关于Enum
- 关于枚举enum
- C#中关于Enum
- 饕餮元年开发日记(一)
- 控制图片不让匿名下载的方法
- 我的饕餮元年获奖了!
- xml中字符的转义
- 2003年总结:中国十位高级学者劣行大批判
- 关于Enum局域网中的机器
- 27个容易读错的汉字及其含义
- 科幻小说流派-赛伯朋克
- PC时代的英雄-一个个闪亮的名字
- 今天开始记blog
- XML+SQL=数据库的未来?
- 保险箱和窃贼的发展史
- 被透支的中国发展
- 比尔盖茨给青少年的11条准则