如何使用c#获取RAM的完全内存转储

时间:2012-04-18 06:01:25

标签: .net c#-4.0 memory

如何使用C#.NET获取完整内存转储?

2 个答案:

答案 0 :(得分:3)

唯一安全的方法是使蓝屏成为Windows并获得转储本身。通过KeBugCheckEx内核函数发生蓝屏,您需要一个定制的设备驱动程序来以编程方式调用它。或者您可以使用CrashOnCtrlScroll注册表技巧并自行触发它。

或者您可以使用两台计算机将内核调试器连接到系统,并使用.crash调试器命令触发内存转储。

像SysInternals的LiveKD这样的方法可以在同一台计算机上进行部分内核检查,但由于内存不断变化,它们并不“准确”。使用这些方法无法获得健康的转储。

使用C#完成所有这些操作是没有意义的。

答案 1 :(得分:0)

使用MiniDumpWriteDump,您可以通过将DumpType指定为MiniDumpWithFullMemory来获得完整的进程转储。

您可以通过获取进程句柄列表并使用MiniDumpWriteDump迭代它来尝试为系统中的所有进程获取此值。我不知道你是否会遇到与安全相关的问题。

至于从用户模式进程获取内核内存转储,据我所知,这是不可能的。