如何使用 C# 获取 RAM 的完整内存转储



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

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

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

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

使用 C# 执行所有这些操作毫无意义。

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

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

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

最新更新