#c_sharp #файлы #права
Вопрос:
Можно ли сохранить файл в сетевую директорию используя учетную запись другого пользователя?
Подробности:
Есть служба, работающая под учетно записью System.
Служба, кроме прочего, занимается синхронизацией со сторонним сервисом из которого
нужно выкачивать файлы и складывать в сетевую папку.
Но у System нет прав доступа к сетевой папке.
Зато служба знает логин/пароль пользователя, у которого такие права есть.
(Пока видится только сохранение файла в temp и запуск копирования через Process.Start,
но может быть есть что-то более элегантное?)
Ответы
Ответ 1
Вы можете выполнить код внутри своего процесса от другого пользователя. Сначала импортируем WinAPI функцию LogonUser: [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); А дальше вот так: IntPtr token; if (LogonUser("SomeUser", "SomeDomain", "SomePwd", 2, 0, out token)) { var identity = new WindowsIdentity(token); using (identity.Impersonate()) { // здесь вы можете убедиться, что код выполняется под другим юзером Console.WriteLine(Environment.UserName); // делаем что-то File.WriteAllText(@"path.txt", "hello!"); } } else { Console.WriteLine("Invalid credentials"); }
Комментариев нет:
Отправить комментарий