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

下一篇: How can I update npm on Windows?