使用SetSystemTime时缺少权限

时间:2017-05-29 07:33:52

标签: windows privileges

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

  

客户不持有所需的特权。

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

我使用的是Win7 x32 Professional。

它是具有管理员权限的标准用户,但我尝试在没有"Run as Administrator"的情况下更改时间,因为调用SetSystemTime功能的程序不应该以"Run as Administrator"开头。

我认为Change the system time政策的目的正是针对这种情况,并且它也在MSDN上进行了描述

我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

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

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

如果无法接受提升提示,则必须安装系统服务以代替您的应用程序更改系统时间。