一个简单的程序可以负责BSOD吗?

mat*_*ath 8 windows bsod

我有一个客户是谁告诉我,我的程序(简单的用户土地方案,而不是一个驱动程序)崩溃他的系统有蓝屏死亡(BSOD).他说他从未在其他程序中遇到过这种情况,而且他可以轻松地用我的程序重现它.

BSOD的类型为CRITICAL_OBJECT_TERMINATION(0x000000F4),对象类型0x3(进程):对系统操作至关重要的进程或线程意外退出或终止.

一个简单的程序可以负责BSOD(即使在Vista上......)还是应该检查硬件或操作系统安装?

Jon*_*eet 10

仅仅因为你的程序不是驱动程序并不意味着它不会使用驱动程序.

理论上,您的代码不应该能够BSOD计算机.操作系统要确保不会发生这种情况.根据定义,这意味着在硬件或代码以外的代码中存在问题.但这并不排除代码中存在错误.

  • S.Lott:我想他的意思是在x86保护模式下,ring 3不能取下ring 0.这与Windows无关. (9认同)

Dir*_*mar 5

使用用户空间程序导致BSOD的最简单方法是(afaik)杀死Windows子系统进程(csrss.exe).这不需要有缺陷的硬件,也不需要内核或驱动程序中的错误,它只需要管理员权限1.

你的代码到底在做什么?错误消息("对系统操作至关重要的进程或线程意外退出或终止.")听起来像是一个必要的系统进程终止.也许你正在杀死一个进程并无意中得到了错误的进程?

如果可能的话,你可以尝试从该客户那里获得内存转储.使用Windows调试工具的描述,你可以再进一步分析倾倒在这里.

1 Windows不会阻止您这样做,因为它"让管理员控制他们的计算机".所以这是设计而不是错误.阅读雷蒙德的文章,你会明白为什么.