2011-07-05 58 views
1

我需要模擬我的代碼以不同的Windows用戶ID運行,現在我正在使用一些代碼,我從網上調用了一些本地庫。在Windows 7中模擬C#代碼

代碼的目的是更改文件服務器上用戶目錄權限的權限。

我可以更改我的文件夾權限,但我有其他用戶的憑據去並更改他的文件夾的權限。但是我通過冒充他來運行我的機器上的代碼。

但是,我得到未經授權的例外。

我使用的代碼是:

[DllImport("advapi32.dll", SetLastError = true)] 
     private static extern int LogonUser(
      string lpszUserName, 
      string lpszDomain, 
      string lpszPassword, 
      int dwLogonType, 
      int dwLogonProvider, 
      ref IntPtr phToken); 

我不知道這是工作在Windows 7或沒有。有沒有人遇到這樣的問題..?

異常我得到:

Messagee:"{"Attempted to perform an unauthorized operation."}" 
stack trace: 
at System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType type, String name, SafeHandle handle, SecurityInfos securityInformation, SecurityIdentifier owner, SecurityIdentifier group, GenericAcl sacl, GenericAcl dacl) 
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext) 
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, AccessControlSections includeSections, Object exceptionContext) 
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, AccessControlSections includeSections) 
at System.Security.AccessControl.FileSystemSecurity.Persist(String fullPath) 
at System.IO.Directory.SetAccessControl(String path, DirectorySecurity directorySecurity) 
at FolderAccessManager.Program.Main(String[] args) in 

能否請您分享一些解決方案..?

+0

請詳細說明例外情況,應該有所幫助 –

+0

編輯例外信息的情況; – sbmandav

+0

爲什麼不使用'runas'? –

回答

1

看一看WindowsIdentity.Impersonate。你會看到一個如何去做的例子。

+0

我使用了相同的代碼...看起來像我冒充的用戶沒有足夠的權限.. – sbmandav

1

您是否在使用ASP.NET加入域的計算機?

當使用默認的應用程序標識運行時,我得到了一個完全相同的消息,將這段代碼放在一個asp.net應用程序中。使用'域管理員'權限將應用程序池用戶更改爲域用戶可以解決此問題(還包括Windows 7)。