6

私はこの質問に行き詰まっています。

私は 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);

しかし、アカウントがローカル システムにアクセスできないため、なりすまし中にローカル システムにアクセスできません。

この状況でファイルをコピーするにはどうすればよいですか? バッファのようなものを使用して、偽装をオン/オフにする必要がありますか?

4

1 に答える 1

4

あなたがしなければならないことは、すべてのバイトを読み取ってから書き込むことです:

    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);
    }
于 2011-06-28T14:00:41.400 に答える