2012-07-11 72 views
1

我想编写代码以编程方式在我的工作站上的应用程序上创建一个目录(并执行其他文件操作) - 使用Directory.CreateDirectory这很容易,我知道该怎么做。但是,问题是我试图在服务器上执行此操作,而我的用户标识没有权限这样做。我有一个A/D用户ID来做到这一点,但我不知道如何在我的应用程序中使用它来做我需要做的事情(模拟不是它所谓的,但是...) 。如何使用具有不同用户标识的Directory.CreateDirectory?

这里就是我想要做的:

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

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

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

什么进入其中的“魔术”发生的地方?还是我吠叫错了树?我想说,我的服务器证书最终会在我创建的DirectorySecurity对象的某个地方出现,但是DirectorySecurity的任何属性似乎都无能为力。

回答

3

您需要模仿具有“魔术代码”权限的帐户。

WindowsIdentity.Impersonate有样品(从SO引用:How do you do Impersonation in .NET?

以下是代码最重要的组块(LogonUser是PInvoke的从ADVAPI32.DLL):

// 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())) 
{ 
... 
} 
相关问题