Windows不会为低完整性级别的进程编写故障转储
我配置了Windows把我的应用程序的崩溃转储到特定的目录(通过LocalDumps Registry - 我有DumpType = 2)
当我使用标志为“以最高权限运行”的任务调度程序运行我的应用程序时,它创建具有“低完整性级别”的子进程,并且此低完整性级别进程崩溃 - 此进程的目录中没有故障转储。
只有在这种情况下才会发生:“以最高权限运行”和“低完整性级别”。 如果我在这些条件下更改任何内容 - 转储已成功创建。
如何强制Windows保存此类故障转储?
这是我的'研究'的结果:
当用户模式应用程序崩溃时,OS会根据注册表中的配置为崩溃的记录器进程创建WerFault.exe来处理它。 它是这样创建的(对于来自SysWOW64的名为WerFault的x86应用程序): C:WindowsSysWOW64WerFault.exe -u -p 2676 -s 60
,其中-p
是崩溃进程的PID( -u
表示usermode应用程序崩溃,什么-s
是我不知道)。
在WerFault.exe中有下一个函数调用链:
_wmain()
UserCrashMain()
OpenProcess()
在OpenProcess()中,WerFault.exe会尝试打开崩溃的进程。
在这种特殊情况下(“为父母运行最高权限”和崩溃孩子的“低完整性级别”),OpenProcess()返回错误,GetLastError返回5 - ERROR_ACCESS_DENIED - WerFault.exe以退出代码0x80004005结束 - 未指定错误。
所以,我认为这是Windows中的bug,因为在其他情况下总是创建转储。
链接地址: http://www.djcxy.com/p/21493.html上一篇: Windows doesn't write crashdumps for process with low integrity level