我需要在不同的操作系统中检测由BSOD引起的重启。可以追查这种情况吗?内存转储是否足够? Windows 7显示一个很好的对话框,系统已从严重错误中恢复 - 它是如何知道的?
答案 0 :(得分:2)
Windows提供了一个注册callback on bugchecks的接口所以你可以注册一个函数来执行一个特定的错误检查 - 创建一个简单的文件或类似的东西,然后在这个其他的操作系统,你可能会检查是否文件存在 - 如果存在,那么你的bugcheck回调就被执行了。发生了错误检查?当然,您需要考虑的是,对函数的调用是在IRQL的HIGH_LEVEL下发出的,因此您必须查看适用的限制,这也是Windows驱动程序开发的领域。
答案 1 :(得分:1)
在互联网上搜索似乎Windows 尝试在C:/Windows/Minidump
中生成转储文件。你可以在那里寻找文件。请注意,我说尝试,因为BSOD可能是致命的,无法创建转储文件(例如在硬盘驱动器崩溃期间,出于显而易见的原因)。
您可以在文件上查找创建日期以检测最新文件。
这显然要求您可以在其他操作系统中安装Windows文件系统,但这似乎是一个不错的解决方案。
答案 2 :(得分:0)
您可以编写一个简单的Windows服务,将状态信息写入其他操作系统可以查找的位置。例如,这可能是MBR之后的未使用扇区之一,专用分区或USB记忆棒。
当服务启动时,您编写一条消息,指示Windows已启动并正在运行,可能带有时间戳。您可以每隔一段时间更新一次,甚至可以包括状态信息,如CPU负载或驱动程序加载/卸载事件(如果这样做有用)。当服务检测到系统正在关闭时,它会写入一条消息说明。当您的其他操作系统查看此信息时,如果最后一条消息未说明系统是故意关闭的,那么您可以断定Windows崩溃了。 Windows执行类似的操作,以便引导加载程序可以提供以安全模式启动系统。
显然,这不允许您区分BSOD和其他类型的崩溃,如果系统断电,您会得到误报。如果在系统关闭过程中发生BSOD,您也将无法检测到BSOD。这些警告是否重要取决于你没有告诉我们的细节。
答案 3 :(得分:0)
默认情况下,Windows会在系统崩溃时将事件记录到事件日志中。 (见下面的评论)。
答案 4 :(得分:0)
不是正常的方式,因为crashdump实际上是由执行BSoD的代码写入页面文件,然后重启后,Windows将其写入最终的转储文件。