【发布时间】:2010-03-31 16:53:52
【问题描述】:
我正在使用 WinAPI 在 Windows XP SP3 机器上设置时区。我正在从HKLM\Software\Microsoft\WindowsNT\Time Zones\<time zone name> 键读取时区信息,然后将时区设置为指定的时区。
我枚举 Time Zones 键下的键,获取 TZI 值并将其填充到 TIME_ZONE_INFORMATION 结构中以传递给 SetTimeZoneInformation。一切似乎都在第一次通过。时区改变,不返回错误。
我第二次执行此操作(相同用户,新会话,在 userinit 之前登录)调用成功,但系统不反映时区更改。文件上的时钟和时间戳都不会更新到新时区。当我导航到:
HKLM\System\CurrentControlSet\Control\TimeZoneInformation 我的新时区信息出现了。
在设置时区时发生了一些奇怪的事情:
- 此外,当我从注册表解析 TZI 二进制值以存储在我的
TIME_ZONE_INFORMATION结构中时,我注意到该结构的DaylightDate.wDay和StandardDate.wDay字段始终设置为 0 - 我尝试在调用
SetTimeZoneInformation后立即调用 GetTimeZoneInformation,但调用失败并出现 1300 错误(并非所有引用的权限或组都分配给调用者。)
我还要确保发送 WM_BROADCAST 消息,以便 Explorer 知道发生了什么。
认为这是将字节数组解析为TIME_ZONE_INFORMATION 结构吗?还是我错过了其他重要的事情?
编辑:
找到一份说明为什么会发生这种情况的文档:here。特权是在 Vista 中引入的...感谢 MSDN 文档...
根据微软documentation 我正在启用 SE_TIME_ZONE_NAME 当前进程的权限
令牌。但是,当我尝试拨打
LookupPriviledgeValue for
SE_TIME_ZONE_NAME 时,我得到一个 1313 错误(指定的权限不会 不存在。 )。
【问题讨论】: