我正在编写一个 Win32 应用程序,我需要知道当前连接的网络文件共享是什么。例如,\ip-addr\share-name\ 或 \Device\Mup\ip-addr\share-name\
该解决方案不能涉及安装驱动器。
我尝试了 WNetOpenEnum,但这给了我空的本地名称和“Web 客户端网络”的远程名称,而不是我需要的。
我正在使用连接的 Samba 共享进行测试。
我正在编写一个 Win32 应用程序,我需要知道当前连接的网络文件共享是什么。例如,\ip-addr\share-name\ 或 \Device\Mup\ip-addr\share-name\
该解决方案不能涉及安装驱动器。
我尝试了 WNetOpenEnum,但这给了我空的本地名称和“Web 客户端网络”的远程名称,而不是我需要的。
我正在使用连接的 Samba 共享进行测试。
#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
第一行是指连接的网络驱动器号,其他两个是连接的共享,没有驱动器号。