如何使用具有不同用户ID的Directory.CreateDirectory?

时间:2012-07-11 00:06:25

标签: c# file-io

我正在尝试编写代码以便在我的工作站上的应用程序上以编程方式在服务器上创建目录(并进行其他文件操作) - 使用Directory.CreateDirectory这很容易,我知道如何做到这一点。但是,问题是我试图在我的用户ID没有权限的服务器上执行此操作。我确实有一个A / D用户ID,但是我对如何在我的应用程序中使用它来做我需要做的事情一无所知(模仿不是它所谓的,但是...)。

这就是我想要做的事情:

System.Security.AccessControl.DirectorySecurity ds = new System.Security.AccessControl.DirectorySecurity();

// <-- something magic happens here -->

Directory.CreateDirectory(@"\\ofmsws42\c$\New_Directory", ds);

“神奇”发生的地方是什么?还是我在错误的树上吠叫?我想说我的服务器凭据最终在我正在创建的DirectorySecurity对象中的某个地方,但DirectorySecurity的所有属性似乎都没有。

1 个答案:

答案 0 :(得分:3)

您需要使用“魔法代码”中具有权限的帐户进行冒充。

WindowsIdentity.Impersonate有样本(引自SO:How do you do Impersonation in .NET?

以下是最重要的代码块(LogonUser是来自advapi32.dll的PInvoke):

// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
      LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
      out safeTokenHandle);

using (WindowsImpersonationContext impersonatedUser = 
   WindowsIdentity.Impersonate(safeTokenHandle.DangerousGetHandle()))
{
...
}