我有一个问题,有时(我还没有设法找出一个模式,它只会每隔几次我尝试一次)如果我的应用程序使用更改 Windows 时间SetSystemTime()
,Windows 会崩溃。
我的意思是弹出一条带有标题的消息,
微软Windows
和文字
应用程序没有响应。如果您等待,程序可能会再次响应。
...带有 [结束进程] 和 [取消] 按钮。
我已经等了很长时间(比如 20 分钟),但它并没有消失。
如果我结束进程或取消,任务栏消失,消息框消失。但是,如果我按键盘上的任何键,消息框就会回来。系统处于此状态时,我无法查看任务管理器。按 Ctrl-Alt-Delete 没有任何作用,Ctrl-Shift-Esc 也没有。
问题是,这种情况并非每次都会发生,它只会在写入过滤器 (UWF) 开启时发生。
这是我设置系统时间的代码:
[StructLayout(LayoutKind.Sequential)]
internal struct SystemTime
{
public short Year;
public short Month;
public short DayOfWeek;
public short Day;
public short Hour;
public short Minute;
public short Second;
public short Milliseconds;
}
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool SetSystemTime(ref SystemTime st);
然后
short year, month, day, hour, minute, second;
SystemTime systemTime = new SystemTime();
// code to populate all the components of the time.
systemTime.Year = year;
systemTime.Month = month;
systemTime.Day = day;
systemTime.Hour = hour;
systemTime.Minute = minute;
systemTime.Second = second;
if (SetSystemTime(ref systemTime))
{
MessageBox.Show("Time changed!");
}
else
{
MessageBox.Show("Time change failed.");
}
}
是什么导致了这次崩溃,我该如何预防?我必须从写过滤器中排除一些东西吗?