Windows不会为低完整性级别的进程编写故障转储

时间:2016-05-10 11:55:17

标签: windows crash-dumps

我配置了windows以将我的应用程序的故障转储放入特定目录(通过LocalDumps Registry - 我有DumpType = 2)

当我从任务计划程序运行我的应用程序时带有标记"以最高权限运行",它会创建具有低完整性级别"的子进程,并且这种低完整性级别进程崩溃 - 此进程的目录中没有崩溃转储。

仅在以下情况下才会发生:"以最高权限运行"和"低完整性水平"。如果我在这些条件下更改了任何内容 - 转储已成功创建。

如何强制Windows保存此类故障转储?

我的研究结果'

当用户模式应用程序崩溃时,操作系统会根据注册表中的配置为崩溃的记录器进程创建WerFault.exe来处理它。 它创建类似(对于来自SysWOW64的称为WerFault的x86应用程序):C:\Windows\SysWOW64\WerFault.exe -u -p 2676 -s 60,其中-p是崩溃进程的PID(-u表示用户模式应用程序崩溃,以及-s我不知道。

在WerFault.exe中有下一个函数调用链:

_wmain()
    UserCrashMain()
        OpenProcess()

在OpenProcess()中,WerFault.exe尝试打开崩溃的进程。

在这种特殊情况下("以最高权限运行"对于父级和"低完整性级别"对于崩溃的子级),OpenProcess()返回错误并且GetLastError返回5 - ERROR_ACCESS_DENIED - 和WerFault.exe完成,退出代码为0x80004005 - 未指定错误。

所以,我认为它是Windows中的错误,因为在其他情况下转储始终是创建的。

0 个答案:

没有答案