如何冒充WinForms,C#App的Windows内置管理员角色?

时间:2010-08-07 14:57:21

标签: c# winforms .net-3.5 cas role-based

似乎特权的提升是大多数开发人员争吵的常见问题,因为大部分时间他们根本没有。我是一个人,但我正在与一个庞大的背景工作者例程战斗,我正在努力将我的代码保持在将使用它的类本地。鉴于我的后台工作人员在“RunWorkerCompleted”处理程序方法中完成后所做的代码和引用数量,这证明难以接受这个作为可行的替代方案:

HOMEWORK 1:

HOMEWORK 2:

HOMEWORK 3:

我的背景工作者对我的MainForm类有太多的依赖,因此我考虑将整个解决方案运送到具有'Admin'privs的单独进程。这涉及到太多的切碎和变化。

Omega Coder:

在阅读了70-536考试的CAS之后,我知道上面这个例子中的大多数术语,但我没看到它是如何以及为什么有效的?有人可以解释为什么授权给'ManagersOnly'方法?一旦PrincipalPolicy更改为WindowsPrincipal,接下来的两个步骤就像普通的对象实例化语句一样,如下所示:

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity);

显然,不存在这样的过载,但它在过载方面非常清楚。

问题1: OmegaCoders示例如何实现此效果?因为我的用户是'BUILTIN \ Administrators'组的一部分,所以它肯定有效。我正在寻找基于文献的答案,所以要尽可能详细地了解。

更新1:

问题2:如何将PrincipalPolicy恢复到以前的状态...一旦方法返回,我不需要将PrincipalPolicy设置为'WindowsPrincipal'???因此,该应用程序可以像我预期的那样继续作为低权限用户运行。

问题3:一旦'ManagersOnly'方法返回,是否丢弃了权限?它的范围是方法的生命吗?

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);

*更新2:*

这很难实现,因为在我的Win7 Pro开发机器上我可以测试和运行任何东西,但是当我尝试在简单的Win7 Home笔记本上测试一些代码时,我发现权限被拒绝了。这引起了将PrincipalPolicy更改为'WindowsPrincipal'的问题并不适用于所有vista和Win7用户,因为许多用户甚至不会成为管理员用户组的一部分。所以这个选项没用......坐在这台小型笔记本电脑上,它变得非常明显,这不是我需要的解决方案。

IGNORE PREVIOUS Qs - 我自己的研究员已经做过他们不可行。

问题4:如何在代码中以编程方式和临时模拟管理员?

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的。

似乎毕竟我一直在进行的挖掘工作似乎并不是一种提升方法权限的方法,因为CAS赞美RBS所以如果用户不属于正确的组。然后甚至没有必要访问管理员权限,因为rbs告诉cas用户不属于该组,因此请求被退回并且权限被拒绝。导致异常。

如果用户是您需要的组的一部分,即管理员,那么更改域名PrincipalPolicy将为您提供一个临时解决方案,但它不适合那些根本不属于管理员用户组的用户。那就是上述解决方案崩溃的地方。

答案很长,将容易出问题的代码发送到一个小的单独的.exe文件中并单独运行。