我的应用使用SetSystemTime()
来设置来自GPS源的PC时钟。在禁用了用户帐户控制的Windows 7中,此工作正常,但在Windows 8中,即使禁用了UAC,也会失败。我得到的错误是ERROR_PRIVILEGE_NOT_HELD
。登录到计算机的用户在管理员组中。如果我在资源管理器中的文件的上下文菜单中以“以管理员身份运行”运行应用程序,我只能让它工作 - 但登录用户是管理员。无法在Windows 8上使用SetSystemTime设置时钟
所以......我需要做什么不同的Windows 8获得SetSysytemTime()
工作?我是否需要比当前用户的管理员权限更高的特权?如果是这样,什么比管理员有更高的特权?或者是否需要以不同的方式设置用户帐户以允许这些类型的呼叫在Windows 8上运行?
编辑:如前所述的意见,手动试图使SE_SYSTEMTIME_NAME
权限不起作用。尝试使用LsaAddAccountRights
的建议MSDN方法添加权限。
“UAC禁用”角度是一个非常阴暗的角度,它不能被禁用afaik。几乎肯定不是在Win8上,底层管道用于提供Metro应用运行的沙箱。您需要一个清单来请求提升或从已升级的进程启动您的应用程序。 –
它提供了关闭UAC的选项......所以它实际上没有被禁用吗?多烦人! –
“调用进程必须具有SE_SYSTEMTIME_NAME特权,默认情况下此特权被禁用,SetSystemTime函数在更改系统时间之前启用SE_SYSTEMTIME_NAME特权,并在返回之前禁用特权,有关详细信息,请参阅使用特权运行。 - 也许在Windows 8中,这个特权不会自动启用,你必须用AdjustTokenPrivileges()自己来完成。可能值得尝试。 –