带域名的Win32 C ++ WNetAddConnection2?

时间:2015-04-02 15:51:42

标签: c++ winapi fileshare

我正在处理一台放置在客户站点时将处于自助服务终端模式的计算机。应用程序GUI将是用户对系统的唯一界面,当用户想要将文件复制到远程位置时,应用程序需要映射/取消映射共享文件夹。我使用WNetAddConnection2进行映射,一旦用户离开Copy对话框,我就使用WNetCancelConnection2来取消映射。根据客户的需求,该机器可以直接放置在拥有共享文件夹的域上,也可以放在单独的域上。对于我们的测试,我们将域上的计算机设置为无法访问DNS,并且目标文件共享位于单独域上的Active Directory服务器上。使用WNetAddConnection2,我可以提供我的用户名,密码和路径,例如\\,但是没有找到连接,找不到路径。这个域没有DNS,这是正确的。然后我尝试了\\,而我在那条路上就可以到达那里。

我遇到的问题是,对WNetAddConnection2和NETRESOURCE结构的调用都没有传递域名的字段。是否WnetAddConnection2的情况是NETRESOURCE结构中的用户名字段可以是\?我还没有看到任何文件来证明或反驳这种情况。我想确保这一点,因为使用目标系统的名称而不是IP地址,可能需要指定域。正如您可能从这个问题中注意到的那样,这不是我的主要专业领域。我一直在挖掘寻找答案,但尚未找到任何明确的答案。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

WNetAddConnection2接受lpRemoteNameNETRESOURCE参数的lpUserName字段中的域名。将远程名称指定为\\server\resource\\IPAddress\resource,将用户名指定为domain\username格式。

(当然,您需要正确地转义C / C ++中的反斜杠字符。)

来自MSDN

的略微修改的示例
NETRESOURCE nr;
DWORD res;
TCHAR szUserName[32] = "MyDomain\\MyUserName",
    szPassword[32] = "MyPassword",
    szLocalName[32] = "Q:",
    szRemoteName[MAX_PATH] = "\\\\products2\\relsys";

nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = szLocalName;
nr.lpRemoteName = szRemoteName;
nr.lpProvider = NULL;

res = WNetAddConnection2(&nr, szPassword, szUserName, FALSE);

if(res == NO_ERROR)
  printf("Connection added \n", szRemoteName);
else
  printf("Error: %ld\n", res);
  return;
}