2017-05-29 62 views
0

我试图使用SetSystemTime(从Kernel32.dll)或从cmd.exe使用TIME
都失败,TIME给我的错误权限丢失使用SetSystemTime

所需的特权不保留由客户端。

我已经使用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

我在一个不知所措描述。

+0

您可能需要通过“以管理员身份运行”来启动cmd,否则它仍然在没有提升权限的情况下运行。 – kennyzx

+0

@kennyzx谢谢,但普通用户不能以“以管理员身份运行”运行命令(在我的情况下可能,因为用户拥有它)。使用'SetSystemTime'的程序不能以管理员权限启动 – jeb

+0

因此您试图通过编辑组策略设置来允许标准用户更改系统时间,默认情况下,只有管理员和本地服务可以进行更改? – kennyzx

回答

1

事实证明,虽然SeSystemTimePrivilege不会触发UAC对一个非管理员,这是所产生的限制令牌仍然被删除时该结果的管理员登录的是,你可以使用组策略来将SeSystemTimePrivilege分配给非管理用户,但该策略对管理用户不起作用。

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

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

+0

感谢您的洞察力,我很害怕这样的结果。由于我的程序不能问用户,我必须编写一个系统服务 – jeb

相关问题