1

如何使用与我当前登录的用户不同的用户将文件保存到文件系统?

我目前正在使用 .NET Framework 4.0。

4

3 回答 3

2

如果您有其他用户的登录凭据,则可以冒充其他用户

Win32中使用DLL Import调用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 SafeTokenHandle phToken);

然后你可以在你的代码中进行模拟


SafeTokenHandle safeTokenHandle;

string userName, domainName, password;

const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;

bool returnValue = LogonUser(userName, domainName, password,
                LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                out safeTokenHandle);
于 2013-07-24T14:27:25.197 回答
2

来自 MSDN FileInfo.SetAccessControl

为参数指定的 ACLfileSecurity将替换文件的现有 ACL。要为新用户添加权限,请使用该GetAccessControl方法获取现有 ACL,对其进行修改,然后使用SetAccessControl将其应用回文件。

所以,假设我们有一个有FileInfo问题的文件:

// FileInfo file = ...;
var acl = file.GetAccessControl();

// Add or Remove access rules on this FileSecurity object
acl.AddAccessRule(new FileSystemAccessRule(
    @"domain\someuser",
    FileSystemRights.FullControl, /* pick something less */
    AccessControlType.Allow));

file.SetAccessControl(acl);

或者,如果您需要在保存文件之前执行此操作,则需要使用Impersonation

// You'd be best served to beg, borrow, and steal the LogonUser
// code from the MSDN article.

using (var identity = new WindowsIdentity(token))
using (var context = identity.Impersonate())
{
    using (var stream = File.OpenText("impersonated.txt"))
    {
        // ... write
    }
}
于 2013-07-24T14:32:42.677 回答
-1

我们有一个在专用服务帐户下运行的旧 ASMX Web 服务,我们的应用程序向它发送 Web 请求。文件以字节数组的形式发送到服务,服务将文件写入共享位置。您需要确保您有足够的安全性并为使用它的应用程序登录!

于 2013-07-24T14:27:46.980 回答