0

我正在编写一个 Win32 应用程序,我需要知道当前连接的网络文件共享是什么。例如,\ip-addr\share-name\ 或 \Device\Mup\ip-addr\share-name\

该解决方案不能涉及安装驱动器。

我尝试了 WNetOpenEnum,但这给了我空的本地名称和“Web 客户端网络”的远程名称,而不是我需要的。

我正在使用连接的 Samba 共享进行测试。

4

1 回答 1

0
#include <stdio.h>
#include <windows.h>

int main(int nArgc, char** lppszArgv)
{
    HANDLE hEnum;

    if(NO_ERROR==WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, RESOURCEUSAGE_CONNECTABLE, NULL, &hEnum))
    {
        BYTE ucBuffer[0x4000];

        for(;;)
        {
            DWORD dwCount = -1, dwBufferSize = sizeof(ucBuffer);

            if(NO_ERROR==WNetEnumResource(hEnum, &dwCount, ucBuffer, &dwBufferSize))
            {
                DWORD dwIdx;
                NETRESOURCE* lpNr = (NETRESOURCE*)ucBuffer;

                for(dwIdx = 0; dwIdx<dwCount; dwIdx++)
                {
                    NETRESOURCE* lpItem = &lpNr[dwIdx];

                    printf("%u,%u,%u,%u,%s,%s,%s,%s\n",
                        lpItem->dwScope,
                        lpItem->dwType,
                        lpItem->dwDisplayType,
                        lpItem->dwUsage,
                        lpItem->lpLocalName==NULL ? "" : lpItem->lpLocalName,
                        lpItem->lpRemoteName,  // \\SERVER\share
                        lpItem->lpComment==NULL ? "" : lpItem->lpComment,
                        lpItem->lpProvider);
                }

                continue;
            }

            break;
        }

        WNetCloseEnum(hEnum);
    }

    return 0;
}

会返回一些类似的东西

1,3,3,0,Z:,\\SERVER1\SHARE,,Microsoft Network
1,3,3,0,,\\SERVER2\SHARE1,,Microsoft Network
1,3,3,0,,\\SERVER2\SHARE2,,Microsoft Network

第一行是指连接的网络驱动器号,其他两个是连接的共享,没有驱动器号。

于 2020-12-31T05:29:49.010 回答