SE_SYSTEMTIME_NAME 特权不存在
SE_SYSTEMTIME_NAME privilege does not exists
我正在尝试从 windows7 机器上的用户帐户(而不是管理员帐户)更改系统时间。为了更改系统时间,在这个link中提到我们需要有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")
看这里:
理想情况下,您的 Python 库会将这些字符串定义为命名常量。这是 Python.
中常用的模式
但是还是不行
我已经回答了问题,但还是不行。
这是因为必须由管理员授予您权限,如果您没有权限就不能打开它们,那样会违反安全性。
要授予权限,请使用 GPEdit.msc 或 SecPol.msc。在 GPEdit.msc 中,选择计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 用户权限分配。在这里您可以找到权限分配。
您可以授予帐户或帐户所属的组 "Change the System Time" 权限。
但这可能也不是您想要的。
如果您只想让计算机有正确的时间,请改为配置 windows 互联网时间服务。
控制面板 -> 日期和时间 -> Internet 时间选项卡。
选中复选框 "Synchronise with an internet time server" 如果未选择服务器,请选择 "time.windows.com" 或 "pool.ntp.org"。
这将每周自动设置一次时间,这将使您的计算机与正确时间相差几秒钟。如果您是 运行 一个重要的服务器,您可能需要更频繁地设置它。为此,您需要编辑注册表。
转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\
NtpClient
,并检查值 SpecialPollInterval
。这是以秒为单位。
默认为604800,也就是一周的秒数。对于每日时间检查,请选择 84600。除非您有非常特殊的要求,否则您不需要超过每日时间。
我正在尝试从 windows7 机器上的用户帐户(而不是管理员帐户)更改系统时间。为了更改系统时间,在这个link中提到我们需要有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")
看这里:
理想情况下,您的 Python 库会将这些字符串定义为命名常量。这是 Python.
中常用的模式但是还是不行
我已经回答了问题,但还是不行。
这是因为必须由管理员授予您权限,如果您没有权限就不能打开它们,那样会违反安全性。
要授予权限,请使用 GPEdit.msc 或 SecPol.msc。在 GPEdit.msc 中,选择计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 用户权限分配。在这里您可以找到权限分配。
您可以授予帐户或帐户所属的组 "Change the System Time" 权限。
但这可能也不是您想要的。
如果您只想让计算机有正确的时间,请改为配置 windows 互联网时间服务。
控制面板 -> 日期和时间 -> Internet 时间选项卡。
选中复选框 "Synchronise with an internet time server" 如果未选择服务器,请选择 "time.windows.com" 或 "pool.ntp.org"。
这将每周自动设置一次时间,这将使您的计算机与正确时间相差几秒钟。如果您是 运行 一个重要的服务器,您可能需要更频繁地设置它。为此,您需要编辑注册表。
转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\
NtpClient
,并检查值 SpecialPollInterval
。这是以秒为单位。
默认为604800,也就是一周的秒数。对于每日时间检查,请选择 84600。除非您有非常特殊的要求,否则您不需要超过每日时间。