无法在Windows 8上使用SetSystemTime设置时钟

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

那么……在Windows 8上我需要做些什么才能使SetSysytemTime()工作? 我是否需要比当前用户的管理员权限更高的权限? 如果是这样,什么比管理员更高的特权? 或者我是否需要以不同方式设置用户帐户以允许这些类型的呼叫在Windows 8上运行?

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

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

我认为您需要在应用程序清单中请求requireAdministrator

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

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

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

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