【问题标题】:How to call a Win32 API with elevated priviledges on Windows 7如何在 Windows 7 上调用具有提升权限的 Win32 API
【发布时间】:2017-09-11 22:32:46
【问题描述】:

我们刚刚发现调用 Win32 SetDateTime 函数的代码需要在 Windows 7 中以提升模式运行,即即使以管理员身份登录,仍然必须选择以管理员身份运行设置日期代码更改日期的电话。

我可以在代码中做些什么来始终在提升的权限下调用此函数吗?

【问题讨论】:

    标签: c# .net elevated-privileges


    【解决方案1】:

    您可以使用 ShellExecute API 调用来启动具有提升权限的可执行文件。

    但是,如果在计算机上启用了 UAC(用户访问控制),用户仍会收到 UAC 提示,要求提供提升的运行权限。

    所以我认为您无法避免提示提升权限,但至少您的用户不必以管理员身份手动运行程序。

    如果您在如何以管理员身份启动可执行文件方面需要帮助,请告诉我。

    【讨论】:

    • 没有提升提示,我不想启动可执行文件。我想在提升模式下调用 API 函数。
    • 我认为这是不可能的,您只能在进程范围内“切换”到提升的上下文。当我需要运行提升的代码时,我很惊讶地得知这一点。
    • Elevated 的 API 调用 UAC 提示只会显示您的主进程尚未运行提升的恕我直言,但看到您的问题并非如此。
    【解决方案2】:

    这不是安全工作的方式。更改时钟是一个非常侵入性的操作,它有很多副作用。 Windows 或任何其他操作系统中没有任何机制可以让您以有限的权限启动进程,然后随意绕过这些限制并突然获得管理员权限。如果可能的话,以有限的权限运行程序是没有任何意义的。

    如果您想做这样的事情,那么您必须以提升的权限运行您的程序。在要求您作为服务或计划任务运行的 Vista 和 Win7 上。这需要管理员安装。 UAC 为常规程序提供了一种获得管理员权限的方法,您必须在程序中包含清单,以便通知用户您的权限提升。 Google 'requireadministrator',抢占先机。

    【讨论】:

    • 我非常清楚允许更改时钟的风险,但我的兴趣在于能够远程进行更改,甚至通过安全的 Web 服务调用。我在问如何安装我的代码以在调用时以必要的权限运行。我将把我的代码作为 Windows 服务运行,Web 服务可以以某种方式启用或设置以更改日期或时间。
    【解决方案3】:

    正如其他人所说,您需要生成一个新进程来获得提升的权限,这将导致 UAC 对话框。

    如果您需要在无人看管的情况下运行,您可以尝试作为服务运行。这将为您提供所需的提升上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2011-02-14
      • 2023-03-04
      • 2012-08-18
      • 2011-05-22
      • 2013-01-19
      • 2016-01-17
      相关资源
      最近更新 更多