我可以使用Windows';要实现的小型转储文件";“保存”/&引用;“恢复”;在我的游戏中?

我可以使用Windows';要实现的小型转储文件";“保存”/&引用;“恢复”;在我的游戏中?,windows,crash-dumps,Windows,Crash Dumps,我将在我的游戏中实现一个保存/加载功能,并考虑使用Windows的迷你转储文件来实现这一点 我没有这方面的经验,所以任何帮助都将不胜感激。有可能吗?运行中的应用程序能否从(迷你)转储文件“恢复” 从已经发布的一些答案来看,似乎可以将游戏状态存储在转储文件中,因此我将细化这个问题:我需要添加多少“胶水”才能重新创建无法存储在转储文件中的内容?如下所述: 小型转储文件用于调试目的。您可以从这些文件中重新创建游戏上下文。。。但是为什么不编写自己的文件格式?如下所述: 小型转储文件用于调试目的。您可以从

我将在我的游戏中实现一个保存/加载功能,并考虑使用Windows的迷你转储文件来实现这一点

我没有这方面的经验,所以任何帮助都将不胜感激。有可能吗?运行中的应用程序能否从(迷你)转储文件“恢复”

从已经发布的一些答案来看,似乎可以将游戏状态存储在转储文件中,因此我将细化这个问题:我需要添加多少“胶水”才能重新创建无法存储在转储文件中的内容?

如下所述:

小型转储文件用于调试目的。您可以从这些文件中重新创建游戏上下文。。。但是为什么不编写自己的文件格式?

如下所述:


小型转储文件用于调试目的。您可以从这些文件中重新创建游戏上下文。。。但是为什么不编写自己的文件格式?

小型转储会保存所有虚拟内存和应用程序的CPU状态。到目前为止,似乎可以从转储中恢复所有内容。但事实并非如此,因为句柄信息缺失:虽然句柄值是应用程序内存的一部分,但句柄后面的对象(内核模式对象)已被释放或重新分配。这意味着无法恢复以下内容:

  • 线程
  • 过程
  • 文件和目录
  • 注册表项
  • 窗户
  • 事件
您需要重新分配这些内核资源,为此您需要实现一个(签名的)内核模式驱动程序。
在考虑实现内核模式驱动程序之前,我建议考虑另一种保存和加载应用程序状态的方法。

< P>一个MIDIDAMP保存所有虚拟内存和应用程序的CPU状态。到目前为止,似乎可以从转储中恢复所有内容。但事实并非如此,因为句柄信息缺失:虽然句柄值是应用程序内存的一部分,但句柄后面的对象(内核模式对象)已被释放或重新分配。这意味着无法恢复以下内容:

  • 线程
  • 过程
  • 文件和目录
  • 注册表项
  • 窗户
  • 事件
您需要重新分配这些内核资源,为此您需要实现一个(签名的)内核模式驱动程序。

在考虑实现内核模式驱动程序之前,我建议考虑另一种保存和加载应用程序状态的方法。

< P>最好的方法是使用框架。简而言之,当应用程序崩溃时,您将有机会序列化应用程序重新启动时所需的任何信息。

实现这一点的最佳方法是使用框架。简而言之,当应用程序崩溃时,您将有机会序列化应用程序重新启动时所需的任何信息。

不,这是一个雷区。不推荐。没有从转储文件“恢复”进程的功能。这是不可能的,原因有很多,下面托马斯的答案就是其中之一。另一个原因是用户可能同时修补了操作系统,导致转储文件无用。不,这是一个雷区。不推荐。没有从转储文件“恢复”进程的功能。这是不可能的,原因有很多,下面托马斯的答案就是其中之一。另一个原因是,用户可能同时修补了操作系统,导致转储文件无用。这是一项新功能,因此在开发时间方面,此解决方案可能更便宜。没有?我不知道,但是,你确定你可以选择这些文件的存储位置吗?@liorda你在创建转储文件时节省了开发人员的时间,但是如果你试图从转储文件恢复游戏状态,你将失去它一千倍。这就像使用页面文件作为保存游戏格式一样。确定信息在那里,但祝你好运。@RaymondChen你能解释一下困难吗?@liorda你有一个包含数据的转储文件。现在需要提取数据并将其恢复到数据结构中。这基本上是作为“保存/加载”的“加载”部分的工作“模块,除了更难之外,因为您首先必须查找数据。这是一项新功能,因此在开发时间方面,此解决方案可能更便宜。没有?我不知道,但是,你确定你可以选择这些文件的存储位置吗?@liorda你在创建转储文件时节省了开发人员的时间,但是如果你试图从转储文件恢复游戏状态,你将失去它一千倍。这就像使用页面文件作为保存游戏格式一样。确定信息在那里,但祝你好运。@RaymondChen你能解释一下困难吗?@liorda你有一个包含数据的转储文件。现在需要提取数据并将其恢复到数据结构中。这基本上是作为“保存/加载”模块的“加载”部分的工作,除了更难,因为您首先必须查找数据。我的游戏非常复杂,游戏/模拟状态有几千个对象大。当然,内核驱动程序很难实现,但我的大多数(任何)应用程序是纯逻辑的,而不是您指定的对象。我改进了我的问题,将重点放在您答案的确切方面:有多少“胶水”“我必须重新创建无法存储在转储文件中的东西?我所说的对象是内核模式对象,而不是模拟对象。大多数编程语言都有用于保存对象或对象树的库。我的游戏非常复杂,游戏/模拟状态只有几千个对象大。当然,内核驱动程序很难实现,但我(任何)应用程序的大部分都是纯逻辑的,而不是您指定的对象。我改进了我的问题,把重点放在你答案的确切方面:我必须投入多少“胶水”来重新创建我不能存储在转储文件中的东西?我正在谈论的对象