我知道Win32 API中的WM_TIMECHANGE消息,但是有可能找出哪个应用程序或进程正在改变时间吗?
我有一个应用程序(Windows XP),我正在记录事件,事件记录的时间也在意外地发生变化。
我已经检查过:夏令时调整已关闭,并且与互联网时间服务器的自动同步也已关闭。
Windows操作系统中是否有可以设置系统时间的进程(DST更改和NTP除外)?
答案 0 :(得分:2)
时间更改会保存到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>
请注意,流程名称是明确存储的。