powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к диску на удаленном компьютере
4 сообщений из 4, страница 1 из 1
Доступ к диску на удаленном компьютере
    #40008047
Что я делаю не так?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        static void Main(string[] args)
        {

            NetworkCredential networkCredential = new NetworkCredential(@"domen\user", "pass");
            CredentialCache credentialCache = new CredentialCache();

            UriBuilder uriBuilder = new UriBuilder("xxx.xxx.xx.xx");
            credentialCache.Add(uriBuilder.Uri, "Basic", networkCredential);

            string[] fol = Directory.GetDirectories(@"\\xxx.xxx.xx.xx\c$");

            foreach (var item in fol)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }



на строке string[] fol = Directory.GetDirectories(@"\\xxx.xxx.xx.xx\c$"); получаю System.UnauthorizedAccessException

пароль, домен, компьютер - все рабочее. если авторизоваться на нем "руками" получаю список папок, если нет - исключение. пользователь от которого идет авторизация в NetworkCredential - локал. админ
...
Рейтинг: 0 / 0
Доступ к диску на удаленном компьютере
    #40008115
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неистовый Служитель Культа,

так Вам не достаточно просто создать экземпляр NetworkCredential.

Вы должны по сути олицетворять его контекст:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[DllImport("kernel32.dll")]
private static extern bool LogonUser (string lpzUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

public static string[] GetDirs(string path, string user, string domain, string pwd){
    IntPtr token = IntPtr.Zero;
    string[] dirs;

     bool logon_succeed = LogonUser(user, domain, pwd, 9, 3, ref token);
     if (logon_succeed) {
         using (var ctx = new WindowsIdentity(token).Impersonate()){
            dirs = Directory.GetDirectories(path);
             ctx.Undo();

 
         }
     }

    return dirs[];
}



add:
а хотя возможно я поспешил с ответом, не обратил внимания что вы на удаленную машину пытаетесь коннектится, в документации к LogonUser написано что она пытается опробовать вход на локальную машину, возможно следует поиграться с LogonType перечислением
...
Рейтинг: 0 / 0
Доступ к диску на удаленном компьютере
    #40008122
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неистовый Служитель Культа,

посмотрите вот в эту сторону:
https://www.codeproject.com/Articles/125810/A-Complete-Impersonation-Demo-in-Csharp-NET

быстрым взглядом вроде то что Вам нужно
...
Рейтинг: 0 / 0
Доступ к диску на удаленном компьютере
    #40008138
felix_ff,

спасибо
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к диску на удаленном компьютере
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]