如何使用C#.NET获取完整内存转储?
答案 0 :(得分:3)
唯一安全的方法是使蓝屏成为Windows并获得转储本身。通过KeBugCheckEx
内核函数发生蓝屏,您需要一个定制的设备驱动程序来以编程方式调用它。或者您可以使用CrashOnCtrlScroll
注册表技巧并自行触发它。
或者您可以使用两台计算机将内核调试器连接到系统,并使用.crash
调试器命令触发内存转储。
像SysInternals的LiveKD这样的方法可以在同一台计算机上进行部分内核检查,但由于内存不断变化,它们并不“准确”。使用这些方法无法获得健康的转储。
使用C#完成所有这些操作是没有意义的。
答案 1 :(得分:0)
使用MiniDumpWriteDump,您可以通过将DumpType指定为MiniDumpWithFullMemory来获得完整的进程转储。
您可以通过获取进程句柄列表并使用MiniDumpWriteDump迭代它来尝试为系统中的所有进程获取此值。我不知道你是否会遇到与安全相关的问题。
至于从用户模式进程获取内核内存转储,据我所知,这是不可能的。