【问题标题】:How to run C# application in Guest account as a Administrator如何以管理员身份在 Guest 帐户中运行 C# 应用程序
【发布时间】:2011-10-22 23:28:06
【问题描述】:

我之前的问题没有得到正确答案,并且得到了很多诸如“我们不能这样做”之类的答案。

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

现在我的问题:

第 1 步:

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

第 2 步:

我希望我的程序也可以在受限用户模式下运行。如果很少有人不明白我在这里所说的是我想将上面的 C# 代码运行到访客模式。 在访客模式下,我们无法更改 Windows 注册表的限制。 因此,当我执行我的应用程序时,我收到一条要求输入管理员密码的通知。 插入管理员密码后,我的应用程序运行良好。

第 3 步:

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

第 4 步:

很多人回复我说我们不能在访客模式下执行此操作,因为 Windows 出于安全目的限制用户编辑 Windows 注册表。所以如果你也有这种感觉,请不要回答这个问题。 我要回答那些人,所有运行到访客模式的优秀防病毒软件都可以访问 Windows 注册表。

第 5 步:

  1. 既然我知道管理员密码,那么有什么方法可以在我们的 C# 代码中保存管理员密码并绕过一次又一次询问管理员密码的弹出消息。

  2. 我们有什么方法可以指示 Windows 我们的应用程序将在管理员模式下运行,并且不会一次又一次地询问管理员密码

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

希望你明白我的意思?

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

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

【问题讨论】:

  • Antitivus 软件包以管理员身份运行,并且大部分时间还安装驱动程序 (.sys)。
  • 仅仅因为您(显然是拼命地)想要某样东西,并不意味着它是可能的(尤其是但肯定不限于第 5 步,第 1 点)。你应该重新考虑你的设计。
  • 您要查找的内容称为impersonation - 编辑了链接。甚至可以在仅代码块的基础上进行。如果您想存储管理员密码,但要注意安全风险,并且永远不要将其作为纯文本存储在任何地方,至少要使用加密。
  • @mtijn:是的,但他不是。他明确表示他不想要“通知”(最有可能是 UAC 提示),尤其是不输入密码。 AFAIK,您无法从代码中规避 UAC 提示,更不用说密码插入了。徒劳的。
  • 他说他知道密码.. 无论如何,here 是如何以编程方式登录用户,这也用于我前面提到的关于模拟的链接中。

标签: c# windows security authentication registry


【解决方案1】:

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

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

【讨论】:

  • 特权进程(通常是 Windows 服务)即使在管理模式下也无法编辑注册表。对于编辑 windows 注册表,我们的代码必须是进程或应用程序。如果您说使用 Windows 服务我们可以编辑注册表,那么请告诉我如何操作?
  • 你认为特权进程产生的进程能够修改注册表吗?如果是,即使特权进程是 Windows 服务,此答案也适用,因为它可以生成另一个进程来修改注册表。
  • @Rahul:我很困惑。如果您以管理员用户身份运行 Windows 服务(像 SYSTEM 这样的真正管理员用户,而不仅仅是具有 UAC 权限的用户),它确实可以附加到本地注册表配置单元(例如 HKLM、HKCR)并修改键和值。还是您在描述一些不同的东西?
【解决方案2】:

我不得不说,不,你不能在访客帐户下做管理事情。不,你不能以编程方式绕过 UAC。

也许以下 2 种解决方法对您来说很有趣?

我相信防病毒软件在系统帐户下运行(只能由管理员安装)。对于您的应用程序,您可以创建一个服务器/客户端架构(两者都运行不同的机器),其中服务器由管理员安装(作为整个软件包的一部分)并在系统帐户下默认运行。然后你就可以使用 quest 账号上的客户端向服务器发送命令了。

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

【讨论】:

  • 你知道吗,我正在使用管理帐户安装我的应用程序,但是当我在执行我的应用程序之前进入访客模式时,它要求管理员权限。我的问题是你给出的解决方案是 UAC 提示不应该每次都出现。如果您提供的解决方案是在管理员模式下我必须安装,然后程序必须运行,那么我也会这样做,因为在访客模式下我们无法安装任何应用程序。
  • @Rahul:以管理员用户身份安装的软件与以管理员用户身份执行的软件之间存在很大差异。如果您的程序由降低权限的用户启动,则它的权限将降低(并且需要 UAC)。解决方案是让您的管理员用户安装并启动程序,并在管理员用户离开后继续运行。在 Windows 上执行此操作的常用方法是创建 Windows 服务。
猜你喜欢
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2017-09-20
  • 2013-06-17
  • 2011-09-24
相关资源
最近更新 更多