【问题标题】:Can't set clock using SetSystemTime on Windows 8无法在 Windows 8 上使用 SetSystemTime 设置时钟
【发布时间】:2012-08-22 15:08:07
【问题描述】:

我的应用使用SetSystemTime() 从 GPS 源设置 PC 时钟。这在禁用用户帐户控制的 Windows 7 中运行良好,但在 Windows 8 中,即使禁用了 UAC,它也会失败。我回来的错误是ERROR_PRIVILEGE_NOT_HELD。登录到机器的用户属于管理员组。如果我从资源管理器的文件上下文菜单中以“以管理员身份运行”运行应用程序,我只能让它工作 - 但登录用户是管理员。

那么...我需要在 Windows 8 上做些什么不同的事情才能让SetSysytemTime() 工作?我是否需要比当前用户的管理员权限更高的权限?如果是这样,什么比管理员具有更高的权限?还是我需要对用户帐户进行不同的设置以允许此类调用在 Windows 8 上运行?

编辑:如 cmets 中所述,手动尝试启用 SE_SYSTEMTIME_NAME 权限不起作用。也不会尝试使用建议的 MSDN 方法 LsaAddAccountRights 添加权限。

【问题讨论】:

  • “UAC 禁用”角度是一个非常模糊的角度,它不能被禁用 afaik。几乎绝对不是在 Win8 上,底层管道用于提供运行 Metro 应用程序的沙箱。您需要一个清单来请求提升或从已提升的进程启动您的应用。
  • 它提供了关闭 UAC 的选项......那么它实际上并没有被禁用吗?真烦人!
  • "调用进程必须有SE_SYSTEMTIME_NAME权限,默认关闭该权限。SetSystemTime函数在更改系统时间前开启SE_SYSTEMTIME_NAME权限,在返回前关闭该权限。更多信息参见运行享有特殊特权。” -- 也许在 Windows 8 中,权限不再自动启用,您必须自己使用 AdjustTokenPrivileges() 来实现?可能值得一试。
  • 谢谢乔纳森,我会试试看的。
  • 好的,我已经尝试调整令牌权限 - 它仍然失败。它声称不拥有该特权,因此无法启用它。猜猜我只需要启用安全策略中的权限,或者使用LsaAddAccountRights将其添加到用户的帐户权限中?...

标签: c winapi windows-8


【解决方案1】:

如果您在“用户帐户控制设置”中将 UAC 滑块完全向下移动,则表示 UAC 不会显示任何提示,但仍处于启用状态。任何正常进程仍然在没有管理权限的情况下运行,但提升(通过“以管理员身份运行”或通过声明“requireAdministrator”)将在未经用户同意的情况下发生。

禁用安全策略“用户帐户控制:以管理员批准模式运行所有管理员”或将注册表项“EnableLUA”设置为 0 将更改此行为,但会阻止 所有 Metro 现代 UI 应用程序正在运行。

如果您的用户没有管理权限,则您无法在不使用服务的情况下更改系统时钟。

如果您希望普通用户(自动)提升您的应用程序正常启动(但没有特殊权限)管理员,您可能需要在清单中声明“highestAvailable”。 p>

【讨论】:

  • 谢谢菲利克斯,知道有用。看起来我会写一个服务来完成这项工作! :)
【解决方案2】:

我认为这可能与在 Windows 8 上禁用 UAC 的事实有关,进程(默认情况下)以中等完整性运行,而不是高完整性(请参阅 this post)。

我认为您需要在您的application manifest 中请求requireAdministrator

【讨论】:

  • 谢谢 Damien,这很有道理。虽然很烦人。我理解为什么微软想要(/需要)这样做,它只是打破了我们的应用程序需要将系统时钟与我们的服务器服务同步,因为客户端应用程序必须能够在许多系统中运行而无需用户交互(一些用户不会有管理登录来提升进程,但应用程序仍然需要该级别的权限来执行低级别的操作)。我想必须考虑一种解决方法,因为提示提升权限是不切实际的。
  • @NickShaw - 好吧,它一个特权操作。如果用户无权执行该操作,也许是时候将这个程序(部分?)重写为服务了?
  • 奇怪的是,我的登录用户可以在没有任何提示的情况下更改时钟,但我在同一用户下运行的应用程序不能,除非我专门“以管理员身份”运行它。不过我同意;让服务执行这些特权操作可能是最好的方法。
  • 只是为了确认一下:在清单中设置requireAdministrator 确实有效。
猜你喜欢
  • 2013-11-21
  • 1970-01-01
  • 2019-03-14
  • 2011-10-29
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多