Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用WnetGetResource信息从共享名获取本地路径_C_Windows_Winapi_Network Programming - Fatal编程技术网

使用WnetGetResource信息从共享名获取本地路径

使用WnetGetResource信息从共享名获取本地路径,c,windows,winapi,network-programming,C,Windows,Winapi,Network Programming,我正在尝试从共享名获取本地路径。例如,假设SERVER1将C:\FOLDER1共享为“MYSHARE” 客户端计算机将驱动器M:映射到\\SERVER1\MYSHARE。在客户机上,我想检测MYSHARE是否映射到SERVER1上的C:\FOLDER1 我可以使用NetShareGetInfo获取此信息,但现在我尝试使用wnetapi获取此信息,因为NetShareGetInfo需要管理权限 我尝试在指定的示例中使用WnetGetResource信息: 我将lpRemoteName指定为“\\s

我正在尝试从共享名获取本地路径。例如,假设SERVER1将C:\FOLDER1共享为“MYSHARE”

客户端计算机将驱动器M:映射到\\SERVER1\MYSHARE。在客户机上,我想检测MYSHARE是否映射到SERVER1上的C:\FOLDER1

我可以使用NetShareGetInfo获取此信息,但现在我尝试使用wnetapi获取此信息,因为NetShareGetInfo需要管理权限

我尝试在指定的示例中使用WnetGetResource信息:

我将lpRemoteName指定为“\\server1\myshare”。调用WNetGetResourceInformation成功,但是,lpLocalName和变量字符串部分lplpSystem都返回NULL

#include <Windows.h>
#include <stdio.h>
#include <Winnetwk.h>
#pragma comment(lib, "mpr.lib")
int main(int argc, char *argv[]) 
{
    DWORD sz = sizeof(NETRESOURCE);
    NETRESOURCE nr = {0};
    LPTSTR ptr = NULL;
    LPNETRESOURCE buf = NULL;
    DWORD rc;
    nr.dwScope = RESOURCE_GLOBALNET;    // also tried other values
    nr.dwType = RESOURCETYPE_DISK;
    nr.lpRemoteName = argv[1];
    buf = malloc(sz);
    while ((rc = WNetGetResourceInformation(&nr, buf, &sz, &ptr)) == ERROR_MORE_DATA)
    {
        buf = realloc(buf, sz);
    }
    printf("WNetGetResourceInformation=%d Size=%d\n", rc, sz);
    if (rc == 0)
    {
        printf("LocalName={%s} RemoteName={%s} Provider={%s}\n", buf->lpLocalName, buf->lpRemoteName, buf->lpProvider);
        printf("Variable={%s}\n", ptr);
        free(buf);
    }
}
#包括
#包括
#包括
#pragma注释(lib,“mpr.lib”)
int main(int argc,char*argv[])
{
DWORD sz=sizeof(网络资源);
网络资源nr={0};
LPTSTR ptr=NULL;
LPNETRESOURCE buf=NULL;
德沃德;
nr.dwScope=RESOURCE\u GLOBALNET;//还尝试了其他值
nr.dwType=资源类型\ U盘;
nr.lpRemoteName=argv[1];
buf=malloc(sz);
while((rc=WNetGetResourceInformation(&nr、buf、&sz、&ptr))==ERROR\u MORE\u DATA)
{
buf=realloc(buf,sz);
}
printf(“WNetGetResourceInformation=%d Size=%d\n”,rc,sz);
如果(rc==0)
{
printf(“LocalName={%s}RemoteName={%s}Provider={%s}\n”,buf->lpLocalName,buf->lpRemoteName,buf->lpProvider);
printf(“变量={%s}\n”,ptr);
免费(buf);
}
}
有没有一种方法可以使用wnetapi获取这些信息,我是否使用了正确的方法


谢谢。

共享的名称是
\\server1\myshare
,而不是
\server1\myshare
(请注意前面的两个反斜杠字符)。这只是上面文章中的一个输入错误。显然,StackOverflow将反斜杠视为转义字符。在我的测试中,它的公式是正确的。我不希望允许非管理员用户远程检索此类信息。。。你试过WMI吗?我也试过作为管理员,结果是一样的。如何使用WMI获取该信息?