Я работаю на машине, которая будет находиться в режиме киоска, когда размещена на сайте клиента. GUI приложения будет единственным интерфейсом, который пользователь имеет к системе, и приложению необходимо сопоставлять / отменять отображение общих папок, когда пользователь хочет скопировать файлы в удаленное местоположение. Я использую WNetAddConnection2 для сопоставления, и как только пользователь покидает диалоговое окно «Копировать», я использую WNetCancelConnection2 для отмены сопоставления. В соответствии с потребностями клиента этот компьютер может быть размещен непосредственно в домене, который владеет общими папками, или в отдельном домене. Для наших тестов у нас есть компьютер в домене, который не имеет доступа к DNS, а конечный общий файловый ресурс находится на сервере Active Directory в отдельном домене. Используя WNetAddConnection2, я могу указать свое имя пользователя, пароль и путь, например \\, но не получаю соединение, путь не найден. Это правильно, без DNS в этом домене. Затем я попытался \\, и я с этим путем я могу добраться туда просто отлично.
Вопрос, который у меня возникает, ни в вызове WNetAddConnection2, ни в структуре NETRESOURCE нет поля для передачи имени домена. В случае с WNetAddConnection2 поле имени пользователя в структуре NETRESOURCE может иметь форму \? Я не видел никакой документации, чтобы доказать или опровергнуть это так. Я хочу убедиться в этом, поскольку, используя IP-адрес целевой системы вместо IP-адреса, может потребоваться указать домен. Как вы могли заметить из этого вопроса, это не моя основная область знаний. Я копался, чтобы найти ответ, но пока не нашел ничего определенного. Любая помощь будет оценена.
WNetAddConnection2 принимает доменные имена в обоих lpRemoteName
поле NETRESOURCE
и 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;
}