前几天在我们的产品中出现了一个很奇怪的问题,安装我们的终端代理之后发现所有的远程桌面连接会出现黑屏现象,除非用户在实体终端上敲击键盘或者鼠标才能够让远程桌面登录进去。这个问题困扰了很长时间,我用sysinternal上的工具filemon、regmon仔细比对了出现问题的终端和没有出现问题的终端之间的信息的区别,但是依然毫无所获。在这期间我读了微软官方网站上介绍的关于windows交互式登录的一些列文章,最后将目标锁定在可能是winlogon.exe在远程用户登录时被挂死了,这时除非有个物理中断-鼠标或者键盘的敲击,才能够将winlogon进程从挂死状态解除,然后远程用户才可以登录到当前系统中。但是为什么会挂死系统呢?我研究了很长时间但是一无所获,这个期间访问了微软ntbug网站,这是一批他们称作微软医生的人在日常处理事务时写的博客,其中的这篇文章给我很大的启发:http://blogs.msdn.com/ntdebugging/archive/2008/04/10/closing-the-loop-cpu-spike-in-winlogon-exe.aspx
最后在微软上海技术支持中心的技术人员的帮助下,终于了解到了和我当初设想的一样winlogon进程被挂死了,这是由于出问题的机器上安装了user mode process这个用户导出用户当前堆栈信息的工具,这个工具会一直监视当前系统,所以导致winlogon进程被吊死。
这次问题的分析解决给我很大的启发,而这个网站也成了我最常逛的一个,在windows平台下开发总是会遇到这样那样的问题,不过学会分析解决是最重要的。