SE_SYSTEMTIME_NAME权限不存在

时间:2015-09-25 06:39:01

标签: python windows privileges elevated-privileges

我正在尝试从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.')

为什么我无法获得特定的特权。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您需要的字符串是"SeSystemtimePrivilege"

在Windows头文件中,它的定义如下:

#DEFINE SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")

见这里:

理想情况下,您的Python库会将这些字符串定义为命名常量。这是Python中常用的模式。

然而它仍然没有工作

我已经回答了这个问题,但它仍无法解决问题。

这是因为管理员必须授予您特权,如果您不拥有特权,则无法将其打开,这将违反安全规定。

要授予权限,请使用GPEdit.msc或SecPol.msc。在GPEdit.msc中,选择计算机配置 - &gt; Windows设置 - &gt;安全设置 - &gt;本地政策 - &gt;用户权利分配。您可以在此处找到权限分配。

您可以授予帐户或帐户所属的群组,&#34;更改系统时间&#34;对。

但这可能不是你想要的。

如果您只是希望计算机拥有正确的时间,请改为配置Windows Internet时间服务。

控制面板 - &gt;日期和时间 - &gt; “互联网时间”选项卡。

选中方框&#34;与互联网时间服务器同步&#34;如果没有选择服务器,请选择&#34; time.windows.com&#34;或&#34; pool.ntp.org&#34;。

这将自动设置每周一次的时间,这应该使您的计算机在正确时间的几秒钟内。如果您正在运行重要的服务器,则可能需要更频繁地设置它。为此,您需要编辑注册表。

转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\ NtpClient,然后检查值SpecialPollInterval。这是在几秒钟内。

默认值为604800,即一周内的秒数。对于每日时间检查,请选择84600.除非您有非常特殊的要求,否则您每天的需求不会超过每天。