windows应该有维护自己的共享列表吧?在程序中ping其他机器ping通后,有什么API可以获得其他机器的windows的共享列表(不用WNet函数)?

解决方案 »

  1.   

    简单一些可以直接用命令
    net use \\ip
    net view \\ip
    查看,命令返回的消息就可以了
    有相应的api函数
      

  2.   

    1. 建立空会话
    WNetAddConnection2(&nr,username,password,0);
    //nr为NETRESOURCE数据结构的对象;
    //username为建立空会话的用户名,在此将用户名设置为NULL;
    //password为登陆密码,在此将密码设置为NULL;2. 撤消空会话
    WNetCancelConnection2(ipc,0,TRUE);
    //ipc为TCHAR的指针,我们可以这样获得:
    //swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]),argv[1]为主机名或地址;3. 探测主机时间
    nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf);
    //参数server为主机的名称或地址;
    //pBuf为TIME_OF_DAY_INFO数据结构的指针;
    //nStatus为NET_API_STATUS成员;4. 探测操作系统指纹
    NetServerGetInfo(server,dwLevel,(PBYTE *)&pBuf);
    //dwLevel为等级数,我们选择的是101级;
    //pBuf是SERVER_INFO_101数据结构的指针;5. 探测共享列表
    NetShareEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
    //dwLevel的等级数为1级;
    //pBuf是SHARE_INFO_1数据结构的指针;
    //MAX_PREFERRED_LENGTH指定返回数据的长度;
    //er指明返回的实际可以枚举的成员数目;
    //tr返回所有的成员数目;
    //resume用于继续进行共享搜索;6. 探测用户列表
    NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf);
    //dwLevel的等级数为1级;
    //i为枚举的索引;
    //dwRec返回获取的信息数目;
    //pBuf为NET_DISPLAY_USER数据结构的指针;7. 探测本地组列表
    NetLocalGroupEnum(server,dwLevel,(PBYTE *)&pBuf,-1,&er,&tr,&resume);
    //dwLevel的等级是1;
    //pBuf返回LOCALGROUP_INFO_1数据结构的指针;8. 探测组列表
    NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pGBuf);
    //dwLevel的等级为3;
    //pGBuf返回NET_DISPLAY_GROUP的数据结构指针;9. 探测组内的用户
    NetGroupGetUsers(server,pGBuffer->grpi3_name,0,(PBYTE *)&pUBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
    //pGBuffer->grpi3_name为组的名称;
    //pUBuf返回GROUP_USERS_INFO_0数据结构的指针;10.探测传输协议列表
    NetServerTransportEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
    //dwLevel的等级为0级;
    //pBuf返回SERVER_TRANSPORT_INFO_0数据结构的指针;11.探测会话列表
    NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
    //pszClient指定客户的地址;
    //pszUser指定用户名;
    //dwLevel的等级是10级;
    //pBuf返回SESSION_INFO_10数据结构的指针;12.释放内存
    NetApiBufferFree(pBuf);
    //释放由系统分配的内存空间。
      

  3.   

    我不明白的是,共享资源究竟指的是什么?例如用net view显示共享资源列表,为什么只显示共享的文件夹,文件夹里的东西不算共享资源吗?