使用SetLocalTime()更改Windows时间而不重新启动

时间:2019-01-29 11:00:43

标签: c++ windows winapi clock

我们正在建立一个嵌入式Windows系统,该系统需要具有更改系统日期和时间的功能。我们的系统无法像普通PC一样正常关闭,而是由用户直接切断电源。

当我们尝试使用Win API函数(如SetLocalTime()(具有管理员权限))时,问题就来了,当函数刚刚执行但用户重新启动计算机(即切断电源并打开电源)时,API成功再次),日期设置将恢复为先前的日期设置。看起来OS缓存中的设置需要正常重启才能将设置存储到磁盘。

有人知道如何在不重新启动操作系统的情况下立即“刷新数据缓存”吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

有两种解决方法可以检查是否有帮助:

  1. 在Windows更改时间之后,您将明确执行重新启动操作,以使更改可以在用户直接切断电源之前写入磁盘。您可以使用以下API重新启动系统:

    ExitWindowsEx(EWX_REBOOT | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_UPGRADE | SHTDN_REASON_FLAG_PLANNED)

    引用:“ How to Shut Down the System

  2. 通过传递FILE_FLAG_NO_BUFFERING作为Caching can be turned off for a file的dwFlagsAndAttributes参数的值来打开
  3. CreateFile。禁用缓存后,所有读取和写入操作都将直接访问物理磁盘。因此,您可以将时间存储在这样的文件中,并在系统重新引导时读取并重新设置(Starting an Scheduled task on System Boot)。