0

我正在开发一台放置在客户站点时将处于信息亭模式的机器。应用程序 GUI 将是用户对系统的唯一界面,当用户想要将文件复制到远程位置时,应用程序需要映射/取消映射共享文件夹。我正在使用 WNetAddConnection2 进行映射,一旦用户离开“复制”对话框,我将使用 WNetCancelConnection2 来取消映射。根据客户的需要,本机可以直接放在拥有共享文件夹的域中,也可以放在单独的域中。对于我们的测试,我们将机器放在没有 DNS 访问权限的域上,并且目标文件共享位于单独域上的 Active Directory 服务器上。使用 WNetAddConnection2,我可以提供我的用户名、密码和路径,例如 \\,但不会获得连接,找不到路径。这是正确的,此域上没有 DNS。然后我尝试了\\,并且我可以通过那条路径到达那里。

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

4

1 回答 1

0

WNetAddConnection2lpRemoteName在字段NETRESOURCElpUserName参数中都接受域名。将远程名称指定为\\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;
}
于 2015-04-02T19:03:19.330 回答