如何以管理员身份在Guest帐户中运行C#应用程序

时间:2011-08-09 06:59:25

标签: c# windows security authentication registry

我没有得到正确的答案,并且在我以前的问题中获得了很多答案,例如“我们不能这样做”。

这就是为什么我决定详细解释我的问题请帮助我,如果可以或请问你的朋友谁能回答这个问题。

现在我的问题:

第1步:

我创建了一个编辑各种Windows注册表的C#程序。 要编辑Windows注册表,我们必须具有管理员权限。 我的程序在管理员模式下正常运行没有任何问题。

第2步:

我希望我的程序也能运行到受限用户模式。如果很少有人没有得到我在这里说的是我想将上面的C#代码运行到访客模式。 在访客模式中有一个限制,我们无法更改Windows注册表。 因此,当我执行我的应用程序时,我收到一个要求管理员密码的通知。 插入管理员密码后,我的应用程序运行正常。

第3步:

我希望我的应用程序每次都不能在访客/有限帐户中询问管理员密码。 我也想在访客模式下我的应用程序应该工作。 我还希望在访客模式下,我的应用程序应该能够访问和更改Windows注册表。

第4步:

很多人回复我说我们无法在访客模式下执行此操作,因为Windows限制用户编辑Windows注册表以用于安全目的。所以如果你也觉得这样,那么请不要回答这个问题。 我回答那些人,所有进入访客模式的好的防病毒软件都可以访问Windows注册表。

第5步:

  1. 由于我知道管理员密码,因此有任何方法可以在我们的C#代码中保存管理员密码,并绕过一次又一次询问管理员密码的弹出消息。

  2. 我们是否有任何方式指示Windows我们的应用程序将以管理员模式运行,而不是一次又一次地请求管理员密码

  3. 在访客模式下运行的防病毒应用程序如何执行所有操作,例如从system32文件夹中删除病毒并在病毒攻击后重置注册表。这些防病毒应用程序从不要求“我们在System32文件夹中发现病毒,因为我在访客模式下运行而且无法删除病毒,所以请输入管理员密码以便我可以删除病毒”

  4. 我希望你理解我的意思?

    我想开发一个C#应用程序,它应该以任何模式运行(Admin / Guest / Limited),并且应该能够创建,编辑和删除Windows注册表。

    注意:请不要通过“右键单击并以管理员身份运行”来回答这个问题。

2 个答案:

答案 0 :(得分:2)

据我所知,防病毒软件通过运行两个(或更多)进程解决了这个问题:作为来宾用户运行的用户界面程序和特权进程(通常是Windows服务)。用户程序无法实际操作特权限制资源(如安全注册表配置单元) - 而是与特权进程通信(希望以某种安全方式),特权进程代表用户执行特权操作。

这是 程序访问特权资源(例如硬件)的相同技术。您的用户级进程(通常)没有权利执行各种硬件操作,例如重新映射MMU中的内存,但操作系统会执行,您可以通过询问操作系统来执行您想要的操作。系统调用thunk进入内核模式,该模式具有完全特权。但是,系统调用接口限制了您可以采取的特权操作类型。

答案 1 :(得分:1)

我无法帮助,但是说,不,你不能在访客帐户下进行管理。不,你不能以编程方式绕过UAC。

也许以下2个解决方法对你有用吗?

我认为防病毒软件在系统帐户下运行(只能由管理员安装)。对于您的应用程序,您可以创建一个服务器/客户端体系结构(两者都不运行同一台计算机),由管理员安装服务器(作为整个程序包的一部分),默认情况下在系统帐户下运行。然后,您可以使用任务帐户上的客户端将命令发送到服务器。

另一个解决方案可能不是直接使用注册表,而是使用另一个可由访客帐户访问的基础数据存储,并根据需要将其与注册表同步(启动和关闭?),因此您只需要管理员登录一次或者在你的应用程序运行期间两次。