我试图从Windows7计算机上的用户帐户(而不是管理员帐户)更改系统时间。为了改变系统时间,这里提到我们需要有SE_SYSTEMTIME_NAME特权。这是我的python脚本。

import os,sys
import win32api
import win32security

priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY
hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess (), priv_flags)
privilege_id = win32security.LookupPrivilegeValue (None, "SE_SYSTEMTIME_NAME")
win32security.AdjustTokenPrivileges (hToken, 0, [(privilege_id, win32security.SE_PRIVILEGE_ENABLED)])

win32api.SetSystemTime(2015,11,20,20,5,30,0,0)

但是当我执行这个脚本时,我得到了以下错误。这是回溯。
Traceback (most recent call last):
  File "D:\Public\Script1.py", line 7, in <module>
    privilege_id = win32security.LookupPrivilegeValue (None, "SE_SYSTEMTIME_NAME")
error: (1313, 'LookupPrivilegeValue', 'A specified privilege does not exist.')

为什么我不能获得特殊的特权。我做错什么了?

最佳答案

您需要的字符串是"SeSystemtimePrivilege"
在windows头文件中,定义如下:

#DEFINE SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")

请参见这里:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb530716(v=vs.85).aspx
理想情况下,python库将这些字符串定义为命名常量。这是python中常用的模式。
但是还是不行
我已经回答了这个问题,但还是不行。
这是因为权限必须由管理员授予,如果没有权限,就不能将其打开,这将违反安全性。
要授予特权,请使用gpedit.msc或secpol.msc。在gpedit.msc中,选择“计算机配置”->“Windows设置”->“安全设置”->“本地策略”->“用户权限分配”。在这里您可以找到权限分配。
您可以授予帐户或帐户所属的组“更改系统时间”权限。
但这也可能不是你想要的。
如果只希望计算机具有正确的时间,请改为配置Windows Internet时间服务。
“控制面板”->“日期和时间”->“Internet时间”选项卡。
选中“与Internet时间服务器同步”复选框如果未选择服务器,请选择“time.windows.com”或“pool.ntp.org”。
这将自动设置时间每周一次,这将使您的计算机保持在正确时间的几秒钟之内。如果运行的是重要服务器,则可能需要更频繁地进行设置。为此,您需要编辑注册表。
转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient,并检查值SpecialPollInterval。几秒钟后。
默认值是604800,这是一周内的秒数。对于每日时间检查,请选择84600。除非你有非常特殊的要求,你不会需要超过每天。

10-08 04:58