首页 > 解决方案 > WNetOpenEnumA() 的结果小于 net use 命令

问题描述

我正在尝试用 C++ 实现“网络使用”。

我启动了两个虚拟机并挂载\\172.16.177.222\C$到客户端服务器上的 Y:。出于测试目的,我还打开了 IPC 连接以比较输出。

net use \\172.16.177.222\IPC$
net use \\172.16.177.222\C$ Y:

我得到net use了以下输出

OK           Y:        \\172.16.177.222\C$       Microsoft Windows Network
OK                     \\172.16.177.222\IPC$     Microsoft Windows Network

通过我的程序,我得到了

(0) (null) Microsoft Terminal Services
(0) (null) Microsoft Windows Network
(1) (null) WORKGROUP
(2)  \\W2012-R2
(0) (null) Web Client Network

我有两个问题

  1. WNetEnumResource中缺少\\172.16.177.222\C$and条目\\172.16.177.222\IPC$
  2. 我怎样才能得到 Y: 从那条路?

附上完整的调试源代码:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winnetwk.h>
#pragma comment(lib, "Mpr.lib")

#define MAX_NET_RESOURCES 1024

int EnumNetRes(NETRESOURCE *lpNetRes, int deep)
{
    DWORD dwCount = -1;
    DWORD dwSize = sizeof(NETRESOURCE) * MAX_NET_RESOURCES;
    HANDLE hEnum;  

    if (NO_ERROR == WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_ALL, lpNetRes, &hEnum))
    {
        NETRESOURCE NetResources[MAX_NET_RESOURCES];
        if (NO_ERROR == WNetEnumResource(hEnum, &dwCount, NetResources, &dwSize))
        {
            for (size_t i = 0; i < dwCount; i ++)
            {
                printf("(%d) %s %s\n", deep, NetResources[i].lpComment, NetResources[i].lpRemoteName);
                if (NetResources[i].dwUsage & RESOURCEUSAGE_CONTAINER)
                {
                    EnumNetRes(&NetResources[i], deep + 1);
                }
            }
        }
    }

    return 0;
}

int main(int argc, char** argv[])
{
    NETRESOURCE *initial = NULL;
    EnumNetRes(initial, 0);
    return 0;
}

标签: c++windowsnetworkingsmb

解决方案


推荐阅读