使用WNetGetResourceInformation

时间:2015-07-14 11:35:09

标签: c windows winapi network-programming

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

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

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

我尝试在指定的here示例中使用WNetGetResourceInformation:

我将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);
    }
}

有没有办法使用WNet API获取此信息,我使用的是正确的吗?

感谢。

0 个答案:

没有答案