我知道 Win32 API 中的 WM_TIMECHANGE 消息,但是否有可能找出哪个应用程序或进程正在更改时间?
我有一个应用程序 (Windows XP),我在其中记录事件,并且记录事件的时间意外更改。
我已经检查过:夏令时调整已关闭,与互联网时间服务器的自动同步也已关闭。
Windows 操作系统中是否有可以设置系统时间的进程(DST 更改和 NTP 除外)?
时间更改保存到Windows 事件日志,具体来说,它们保存到安全日志中。现在,这不能保证有效;管理员可以清除安全日志,但这是一种查找 PID 和调用 SetSystemTime 的进程的文件名的方法。
这个答案谈到在系统日志中查找事件;但是,您也应该能够通过查找事件 ID 4616 在安全日志中找到它。我在此处添加了一个示例记录(已编辑各种位):
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
<EventID>4616</EventID>
<Version>1</Version>
<Level>0</Level>
<Task>12288</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2013-10-07T18:55:08.999738200Z" />
<EventRecordID>29419283</EventRecordID>
<Correlation />
<Execution ProcessID="4" ThreadID="5460" />
<Channel>Security</Channel>
<Computer>some computer ID</Computer>
<Security />
</System>
<EventData>
<Data Name="SubjectUserSid">S-SID_REDACTED</Data>
<Data Name="SubjectUserName">UserName</Data>
<Data Name="SubjectDomainName">DOMAIN</Data>
<Data Name="SubjectLogonId">0xBADDFOOD</Data>
<Data Name="PreviousTime">2013-10-07T18:55:08.996254000Z</Data>
<Data Name="NewTime">2013-10-07T18:55:09.000000000Z</Data>
<Data Name="ProcessId">0xPID</Data>
<Data Name="ProcessName">C:\Windows\System32\dllhost.exe</Data>
</EventData>
</Event>
请注意,进程名称是显式存储的。