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

时间:2009-10-19 12:39:44

标签: windows bsod

我有一位客户告诉我,我的程序(简单的用户登陆程序,而非驱动程序)正在使用蓝屏死机(BSOD)使系统崩溃。他说他从未在其他程序中遇到这种情况,而且他可以轻松地用我的程序重现它。

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

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

8 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:5)

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

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

如果有可能,您可以尝试从该客户获取内存转储。使用 Windows调试工具,您可以按照here所述进一步分析该转储。

1 Windows不会阻止您doing so,因为它"keeps administrators in control of their computer"。所以这是设计而不是错误。阅读雷蒙德的文章,你会明白为什么。

答案 2 :(得分:4)

简短的回答是肯定的。很长的答案取决于你的计划是做什么以及它是如何做的?

答案 3 :(得分:4)

通常,它不应该。如果是的话,必须有

  • Windows内核中的错误(可能但非常不可能)
  • 设备驱动程序中的错误(不一定在程序使用的设备中,这可能会非常复杂)
  • 硬件故障

我会打赌第二个选项(设备驱动程序)但如果你能给我们一个更详细的转储它会很有趣。

答案 4 :(得分:3)

嗯,是的,它可以 - 但出于许多不同的原因。

这就是我们在不同的机器,操作系统,硬件等上进行测试的原因。

您是否为您的计划设置了一些要求,并且您的用户是否遵循这些要求?

答案 5 :(得分:1)

如果您不能自己复制,并且您的程序不需要管理员运行,我会有点怀疑

  • 该系统硬件的稳定性
  • 该系统的病毒/恶意软件状态。

如果您可以对客户端框进行物理访问,则可能需要使用最新的扫描程序运行完整的病毒扫描,并在其上运行完整的memtest

我有一个看起来很稳定的系统,除了没有几个程序可以运行(并且有时会使盒子崩溃)。 Memtest显示我的RAM有一些不好的位,但它们处于较高的SIM卡中,因此只有在程序试图使用大量RAM时才能访问它们。

答案 6 :(得分:1)

不,这几乎就是定义。您可以说最糟糕的事情是用户登陆应用程序可能“触发”了Windows错误或驱动程序错误。但现代桌面操作系统对其自身的完整性负全部责任; BSOD是这种完整性的失败。因此操作系统负责,只有操作系统。

(单独的应用程序可能暴露的BSOD错误的示例:作为驱动程序实现的病毒扫描程序,当从扇区0xFFFFFFFF执行文件时崩溃,在这一台机器上恰好包含应用程序的一个DLL的扇区)

答案 7 :(得分:-1)

当程序结束时(我崩溃整个IDE)退出我的应用程序而没有停止所有进程和BD连接时出现问题。我将“停止和断开”代码放在我主表单“Form_Closed”事件的“终止”中,问题解决了,我不知道这是你的情况。

另一个问题可能是用户试图访问您的应用所使用的相同资源(数据库,硬件,套接字等)。询问他/她在BSOD发生时他/她正在使用的应用程序。

病毒不能丢弃。

相关问题