Как скопировать файл с UNC-ресурса в локальную систему? - PullRequest
6 голосов
/ 28 июня 2011

Я застрял с этим вопросом.

У меня есть общий ресурс UNC, я знаю данные учетной записи, которая имеет полный доступ, но у нее нет доступа к моей локальной системе. Я могу получить доступ к удаленному UNC с:

var token = default(IntPtr);
var context = default(WindowsImpersonationContext);
LogonUser(_config.Username, _config.Domain, _config.Password, 2, 0, out token);
context = WindowsIdentity.Impersonate(token);

//TODO :: System.IO operations
File.Copy("remote-unc-path","local-path",true); // Exception : Access is denied.

context.Undo();
CloseHandle(token);

Но я не могу получить доступ к своей локальной системе во время олицетворения, потому что учетная запись не имеет к ней доступа.

Как скопировать файл в этой ситуации? Нужно ли использовать что-то вроде буфера и включать / выключать олицетворение?

1 Ответ

4 голосов
/ 28 июня 2011

Что вам нужно сделать, это прочитать все байты, а затем записать их:

    var token = default(IntPtr);
    using (var context = default(WindowsImpersonationContext))
    {
       LogonUser(_config.Username, _config.Domain, _config.Password, 2, 0, out token);
       context = WindowsIdentity.Impersonate(token);
       var bytes = File.ReadAllBytes("remote-unc-path");
       context.Undo();
       CloseHandle(token);
       File.WriteAllBytes("local-path", bytes);
    }
...