缺少使用 SetSystemTime 的权限

Permissions missing to use SetSystemTime

我正在尝试使用 SetSystemTime(来自 Kernel32.dll)或使用来自 cmd.exe 的 TIME
都失败了,TIME 给我错误

A required privilege is not held by the client.

我已经使用 gpedit.msc 将 local/Users 和用户本身添加到 security settings/Local Policies/Change the system time
我尝试使用 AdjustTokenPrivileges( SeSystemtimePrivilege ...) 启用权限,但出现 GrandPrivilege failed 错误。

我使用的是 Win7 x32 专业版。

这是具有管理员权限的标准用户,但我试图在没有 "Run as Administrator" 的情况下更改时间,因为调用 SetSystemTime 函数的程序不应该以 "Run as Administrator"

我认为 Change the system time 政策的目的正是针对这种情况,并且在 MSDN

中也有描述

不知所措

事实证明,虽然 SeSystemTimePrivilege 不会为非管理员触发 UAC,但它 仍然从管理员时生成的受限令牌中删除登录。结果是您可以使用组策略将 SeSystemTimePrivilege 分配给非管理用户,但该策略对管理用户没有影响。

如果管理用户 运行 时程序需要提升是可以接受的,您可以使用 highestAvailable 清单设置。这样,如果用户是管理员,程序只会要求提升权限。或者,您可以将程序设计为仅在实际需要设置时间时才请求提升。

如果提升提示不可接受,您将必须安装系统服务以代表您的应用程序更改系统时间。