gpt4 book ai didi

c++ - 更改系统时区成功一次后不再更改

转载 作者:太空狗 更新时间:2023-10-29 23:10:03 28 4
gpt4 key购买 nike

我正在使用 WinAPI 在 Windows XP SP3 机器上设置时区。我正在从 HKLM\Software\Microsoft\WindowsNT\Time Zones\<time zone name> 读取时区信息键,然后将时区设置为指定时区。

我列举了 Time Zones 键下的键,抓取 TZI value 并将其填充到 TIME_ZONE_INFORMATION 中要传递给 SetTimeZoneInformation 的结构.一切似乎都在第一次通过时起作用。时区改变,不返回错误。

我第二次执行此操作(同一用户,新 session ,在 userinit 之前登录)调用成功,但系统未反射(reflect)时区更改。文件上的时钟和时间戳都不会更新到新时区。当我导航到: HKLM\System\CurrentControlSet\Control\TimeZoneInformation我的新时区信息出现了。

设置时区时发生了一些奇怪的事情:

  • 此外,当我从注册表中解析 TZI 二进制值以存储在我的 TIME_ZONE_INFORMATION 中时我注意到该结构有 DaylightDate.wDayStandardDate.wDay字段始终设置为 0
  • 我试着调用GetTimeZoneInformation在我调用SetTimeZoneInformation之后但调用失败并出现 1300 错误(并非所有引用的权限或组都分配给调用者。)

我还要确保发送 WM_BROADCAST消息,以便 Explorer 知道发生了什么。

认为是字节数组解析到TIME_ZONE_INFORMATION结构?还是我错过了其他重要的事情?

编辑:

找到一份说明发生这种情况的文档:here . Vista 中引入了权限...感谢 MSDN 文档...

Per the Microsoft documentation I'm enabling the SE_TIME_ZONE_NAME privilege for the current processes
token. But when I attempt to call
LookupPriviledgeValue for
SE_TIME_ZONE_NAME I get a 1313 error (A specified privilege does not exist. ).

最佳答案

尝试使用 LsaAddAccountRights 而不是 LookupPrivilegeValue 和 AdjustTokenPrivileges 来设置 SE_TIME_ZONE_NAME。另见 this topic .

关于c++ - 更改系统时区成功一次后不再更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2554867/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com