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。除非您有非常特殊的要求,否则您不需要超过每日时间。