我有一个客户告诉我,我的程序(简单的用户登陆程序,而不是驱动程序)正在使用蓝屏死机(BSOD)来破坏他的系统.他说他从未在其他程序中遇到过这种情况,而且他可以轻松地用我的程序重现它.
BSOD的类型为CRITICAL_OBJECT_TERMINATION(0x000000F4),对象类型为0x3(进程):对系统操作至关重要的进程或线程意外退出或终止.
一个简单的程序可以负责BSOD(即使在Vista上……)还是应该检查硬件或操作系统安装?
使用用户空间程序导致BSOD的最简单方法是(afaik)到
kill the Windows subsystem process(csRSS.exe).这不需要有缺陷的硬件,也不需要内核或驱动程序中的错误,它只需要管理员权限1.
你的代码到底在做什么?错误消息(“对系统操作至关重要的进程或线程意外退出或终止.”)听起来像是一个必要的系统进程终止.也许你正在杀死一个进程并无意中得到了错误的进程?
如果可能的话,你可以尝试从该客户那里获得内存转储.使用Windows调试工具,您可以进一步分析该转储,如here所述.
1Windows不会阻止你从doing so因为它“keeps administrators in control of their computer”.所以这是设计而不是错误.阅读雷蒙德的文章,你会明白为什么.