Windows 机密调用 Dr. Watson

Raymond Chen

您可能已经注意到 如果您要求 Dr. Watson (drwtsn32.exe) 对 Winlogon 进程进行内存转储,Windows® 会在转储完成后立即关闭。一些人想知道,“为什么将调试程序连接到 Winlogon 会导致整个系统关闭?”

但事实并非如此。在某个进程上运行 Dr. Watson 与将调试程序附加到进程不同。附加调试程序要用到 ntsd 之类的命令,只要您具有必要的权限,就可以这样做。事实上,这是 Windows 团队调试 Winlogon 问题的方法。因此,对此问题的准确答复是“将调试程序附加到 Winlogon 不会导致系统关闭。”

但 Dr. Watson 是检测程序而不是常规解决方案,它只是先对有问题的进程进行内存转储,然后结束该进程。因为 Dr. Watson 实际上不会尝试解决问题,所以如果任由该进程继续运行,该进程只会再次崩溃。这就要再次调用 Dr. Watson,从而导致无限循环。从某种意义上讲,Dr. Watson 是一个调试程序,它实际上不会进行任何调试。此调试程序只是亲临现场,做好详细的笔记,然后结束进程。也正是由于执行内存转储后结束 Winlogon 进程才导致了系统的崩溃。

如果结束 Winlogon,系统将重新启动

如果结束 Winlogon,系统将重新启动  (单击该图像获得较大视图)

Winlogon 是人们熟知的“关键系统进程”,而结束关键进程会强制系统重新启动。系统为什么认为 Winlogon 是对其正常运行很关键的进程呢?对于启动程序而言,Winlogon 负责处理安全注意序列 Ctrl+Alt+Del。如果 Winlogon 失败,安全注意序列将停止运行。这本身就是一件很糟糕的事情。更糟糕的是,由于安全注意序列的“门将”不在,其他程序只能等待用户按 Ctrl+Alt+Del,这会显示一个伪密码对话框。如果它可以被欺骗,说明它不是一个很好的安全注意序列!作为一项保护措施,Windows 会在糟糕的情形变得更糟之前关闭自身。

现在,如果您运行“任务管理器”,突出显示类似于 Winlogon 的关键系统进程,单击“结束进程”并确认,那就糟糕了。您刚刚结束 Winlogon,系统就会重新启动(当然,假定您当前的角色是提升的管理员,因此有充分的权限来结束进程)。

在 Windows 的早期版本中,“任务管理器”曾尝试阻止用户结束那些关键系统进程,但决定哪些进程是关键系统进程的算法还不够智能。只要您采用了足够的欺骗手段,就可以骗过任务管理器,进而创建一个被视为无法结束的程序。当然,事实并非如此。您仍然可以结束该程序,只要使用任务管理器以外的某个程序执行此操作即可(例如,您可以尝试使用 taskkill 程序)。

为避免受欺骗,“任务管理器”已不再尝试阻止您结束关键系统进程了。毕竟,如果不执行任何操作,就不会产生误操作。这就意味着“任务管理器”不会在您结束进程时监视您。它不会在您尝试结束某些可能最好不要关闭的进程时阻止您。如果您选择结束某个关键系统进程,后果自负。

Raymond Chen的网站“The Old New Thing”和同名书籍 (Addison-Wesley, 2007) 讨论了 Windows 的历史和 Win32 编程。他将实施机制的工作留给了其他人。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.