在Windows 7中模拟C#代码

时间:2011-07-05 09:44:31

标签: c# .net active-directory impersonation

我需要冒充我的代码以使用不同的Windows用户ID运行,现在我正在使用一些代码,我从Web上调用了一些本机库。

代码的目的是更改文件服务器用户目录权限的权限。

我可以更改我的文件夹权限,但我有其他用户的凭据去更改其文件夹的权限。但是我通过模仿他在我的机器上运行代码。

但是,我正在获得未经授权的例外。

我正在使用的代码是:

[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 

请您分享一些解决方案..?

2 个答案:

答案 0 :(得分:1)

看看WindowsIdentity.Impersonate。在那里你会看到一个如何去做的例子。

答案 1 :(得分:1)

您是否在ASP.NET中使用已加入域的计算机?

当使用默认的apppool标识运行时,我在asp.net应用程序中获得完全相同的消息。将apppool用户更改为具有“域管理员”权限的域用户解决了此问题(也是Windows 7)。