2015-04-02 4 views
0

Я работаю над машиной, которая будет находиться в режиме киоска при размещении на сайте клиента. GUI приложения будет единственным интерфейсом, который пользователь имеет к системе, и приложение должно отображать/распаковывать общие папки, когда пользователь хочет скопировать файлы в удаленное местоположение. Я использую WNetAddConnection2 для сопоставления, и как только пользователь покидает диалог копирования, я использую WNetCancelConnection2 для отмены. В соответствии с потребностями клиента этот аппарат может быть размещен непосредственно в домене, которому принадлежат общие папки, или он может быть помещен в отдельный домен. Для наших тестов у нас есть машина в домене, у которого нет доступа к DNS, а общий ресурс целевого файла находится на сервере Active Directory в отдельном домене. Используя WNetAddConnection2, я могу указать свое имя пользователя, пароль и путь, например \\, но не получит соединение, путь не найден. Правильно, без DNS в этом домене. Затем я попробовал \\, и я с этим путем могу получить там просто отлично.Win32 C++ WNetAddConnection2 с доменным именем?

Вопрос, который у меня есть, ни вызов WNetAddConnection2, ни структура NETRESOURCE не имеют поля для передачи имени домена. Это имеет место с WNetAddConnection2, что поле имени пользователя в структуре NETRESOURCE может иметь вид \? Я не видел никаких документов, подтверждающих или опровергающих это. Я хочу убедиться в этом, потому что, используя имя целевой системы вместо IP-адреса, может потребоваться указать домен. Как вы могли заметить из этого вопроса, это не моя основная область знаний. Я копаю, чтобы найти ответ, но еще не придумал ничего определенного. Любая помощь будет оценена по достоинству.

+0

Вы используете один и то же имя, которое вы хотите использовать в NET USE. Если эта команда не работает, вы никогда не получите ее работу в своем коде. И вообще, без провайдера имен, это, конечно, не сработает. Последующие действия на serverfault.com –

+0

Отлично, спасибо. Я думал так много, но не видел ничего, поддерживающего мою теорию. Просто нужна была проверка. Это очень помогает. – bmahf

+0

Не изменяйте свой заголовок, чтобы включить «Разрешено». Если есть ответ, отметьте его как принятый. Если нет, создайте ответ самостоятельно, как это было «разрешено», а затем отметьте это как принятое. – crashmstr

ответ

-1

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; 
} 
Смежные вопросы