Открыть/закрыть соединение с UNC без учетных данных

У меня есть клиентское приложение .NET, которое периодически теряет соединение с общим ресурсом UNC, где пользователь находится либо в домене, либо имеет локальную учетную запись с теми же учетными данными на сервере. И у SO, и у Google есть множество примеров использования LogonUser и WNetAddConnection через P-Invoke, но в обоих случаях требуется пароль пользователя. Все, что нужно сделать нашему приложению, — это явно открыть соединение с UNC, скопировать файл и явно закрыть соединение без предоставления учетных данных — другими словами, с использованием текущих учетных данных. Может ли кто-нибудь указать мне правильное направление, как это сделать на С#?


person flipdoubt    schedule 22.10.2009    source источник


Ответы (1)


Согласно документации функции WNetAddConnection2 , вы можете передать Null для имени пользователя, чтобы использовать пользовательский контекст текущего процесса. Я предполагаю, что это означает, что он будет использовать контекст безопасности учетной записи, на которой запущено ваше клиентское приложение. MSDN также говорит передать Null для пароля, чтобы использовать пароль, связанный с любым указанным именем пользователя.

Возможно, установка обоих на Null просто волшебным образом сработает.

person Chris Tybur    schedule 25.10.2009
comment
Спасибо за ответ, Крис. Я нашел эту часть документов и действительно попробовал это до того, как вы опубликовали. Кажется, это работает, так как при передаче значения null не возникает ошибки, но мне трудно доказать, что соединение закрывается после вызова WNetCancelConnection2. Есть ли что-то, что я должен искать на сервере? - person flipdoubt; 27.10.2009
comment
На сервере единственное, что приходит на ум, это зайти в «Управление компьютером» и перейти в «Инструменты системы» -> «Общие папки» -> «Открыть сеансы» и посмотреть, есть ли доказательства подключения клиента к данному общему ресурсу. Если сервер работает под управлением Windows 2008, вы можете запустить оснастку «Управление общими ресурсами и хранилищем», чтобы увидеть ту же информацию. Я предполагаю, что сеанс появится для данного пользователя во время копирования файла, а затем исчезнет вскоре после вызова WNetCancelConnection2. Я всегда устанавливаю последний параметр этой функции в 1, чтобы принудительно отключиться. - person Chris Tybur; 27.10.2009