Сохранение файла от имени пользователя C#

189
26 мая 2018, 04:40

Вопрос:
Можно ли сохранить файл в сетевую директорию используя учетную запись другого пользователя?

Подробности:
Есть служба, работающая под учетно записью System. Служба, кроме прочего, занимается синхронизацией со сторонним сервисом из которого нужно выкачивать файлы и складывать в сетевую папку.
Но у System нет прав доступа к сетевой папке.
Зато служба знает логин/пароль пользователя, у которого такие права есть.

(Пока видится только сохранение файла в temp и запуск копирования через Process.Start, но может быть есть что-то более элегантное?)

Answer 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");
}
READ ALSO
ORA-01036: как исправить данную проблему?

ORA-01036: как исправить данную проблему?

При выполнении запроса назад возвращает сообщение о том, что неверный тип данныхКак это можно исправить? Таблица SQL в Oracle SQL Database XE 11g release-2:

254
В чём разница между LinkedList<T> и LinkedListNode<T>?

В чём разница между LinkedList<T> и LinkedListNode<T>?

Читаю о LinkedList, затем в коде появляется LinkedListNodeВ книге используется, но не объясняется что это

199
Как отрисовать линии на изображении?

Как отрисовать линии на изображении?

Есть такой скрипт(рисует треугольник по заданным координатам и вставляет его в изображение) -

220