3

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

4

2 回答 2

3

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

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

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

使用 C# 做所有这些是毫无意义的。

于 2012-04-20T12:14:53.433 回答
0

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

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

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

于 2012-04-18T08:41:52.393 回答