我知道Win32 API中的WM_TIMECHANGE消息,但是有可能找出哪个应用程序或进程正在改变时间吗?
我有一个应用程序(Windows XP),我正在记录事件,事件记录的时间是意外更改.
我已经检查过:夏令时调整已关闭,并且还会关闭与互联网时间服务器的自动同步.
Windows操作系统中是否有可以设置系统时间的进程(DST更改和NTP除外)?
最佳答案 时间更改保存到
Windows Event Log,具体而言,它们已保存到安全日志中.现在,这不能保证工作;管理员可以清除安全日志,但这是一种查找PID和调用SetSystemTime的进程的文件名的方法.
This answer讨论在系统日志中查找事件;但是,你也应该能够通过查找事件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>
请注意,流程名称是显式存储的.