我需要检测在不同的操作系统中由BSOD引起的重启。这样的情况是可以追踪的吗?内存转储足够了吗?Windows7显示一个很好的对话框,表明系统已从严重错误中恢复-它是如何知道的?
发布于 2012-02-14 23:31:34
Windows提供了一个注册callback on bugchecks的接口,所以你可以注册一个函数来做一些特定于错误检查的事情--创建一个简单的文件或类似的东西,然后在另一个操作系统中,你可以检查这个文件是否存在-如果存在,那么你的错误检查回调就会被执行。是否发生了错误检查?当然,你需要考虑的是,对你的函数的调用是在HIGH_LEVEL的IRQL发出的,所以你必须看看应用了什么限制,而且这也属于windows驱动程序开发的领域。
发布于 2012-02-14 23:31:05
在互联网上搜索,似乎Windows试图在C:/Windows/Minidump
中生成转储文件。您可以在那里查找文件。请注意,我之所以说尝试,是因为BSOD可能非常致命,以至于无法创建转储文件(例如,由于显而易见的原因,在硬盘崩溃期间)。
您可以在文件上查找创建日期,以检测最新的文件。
这显然要求您可以在其他操作系统上挂载Windows文件系统,但这似乎是一个不错的解决方案。
发布于 2012-02-15 05:53:44
您可以编写一个简单的Windows服务,将状态信息写入其他操作系统可以查找的位置。例如,这可以是MBR之后未使用的扇区之一、专用分区或USB记忆棒。
当服务启动时,您可以编写一条消息来指示Windows已启动并正在运行,可能会带有时间戳。您可能会经常更新它,如果有用的话,您甚至可以包含CPU加载或驱动程序加载/卸载事件等状态信息。当服务检测到系统正在关闭时,它会写入一条消息来说明这一点。当您的其他操作系统查看此信息时,如果最后一条消息没有说明系统是故意关机的,那么您可以得出Windows崩溃的结论。Windows执行类似的操作,以便引导加载程序可以在安全模式下引导系统。
显然,这不允许您区分BSOD和其他类型的崩溃,并且如果系统断电,您将得到假阳性。如果在系统关闭过程中发生BSOD,您也无法检测到它。这些警告是否重要取决于你没有告诉我们的细节。
https://stackoverflow.com/questions/9279549
复制相似问题