监视静默进程退出

从 Windows 7 开始,可以使用 GFlags 中的“无提示进程退出”选项卡输入要监视的无提示退出的进程的名称。

在此监视功能的上下文中,我们使用术语 无提示退出 表示受监视进程以下列方式之一终止。

自我终止
监视的进程通过调用 ExitProcess 来终止自身。

跨进程终止
第二个进程通过调用 TerminateProcess 终止受监视的进程。

监视功能不会检测到进程最后一个线程退出时发生的正常进程终止。 监视功能不会检测由内核模式代码启动的进程终止。

若要注册用于无提示退出监视的进程,请在 GFlags 中打开 “无提示进程退出 ”选项卡。 输入进程名称作为 图像 ,然后按 Tab 键。 选中“ 启用无提示进程退出监视 ”框,然后选择“ 应用”。 这会设置以下注册表项中的FLG_MONITOR_SILENT_PROCESS_EXIT标志。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProcessName\GlobalFlag

有关此标志的详细信息,请参阅 启用无提示进程退出监视

有关在 GFlags 中使用 无提示进程退出 选项卡的详细信息,请参阅 配置无提示进程退出监视

在 GFlags 的 “无提示进程退出 ”选项卡中,可以配置在监视的进程以无提示方式退出时将执行的操作。 可以配置通知、事件日志记录和转储文件的创建。 可以指定在检测到无提示退出时启动的进程,并且可以指定监视器将忽略的模块列表。 其中几个设置可全局和单个应用程序使用。 全局设置适用于注册无提示退出监视的所有进程。 应用程序设置适用于单个进程并替代全局设置。

全局设置存储在注册表中的以下密钥下。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit

应用程序设置存储在注册表中的以下密钥下。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\ProcessName

报告模式

报告模式设置可用作应用程序设置,但不能用作全局设置。 可以使用以下复选框来设置报告模式。

启动监视器processEnable 转储集合Enable通知ReportingMode 注册表项是以下标志的按位 OR。

标志 含义
LAUNCH_MONITORPROCESS 0x1 检测到无提示退出后,启动“ 监视进程 ”框中指定的监视进程 () 。
LOCAL_DUMP 0x2 检测到无提示退出时,将为受监视的进程创建转储文件。 对于跨进程终止,还会为导致终止的进程创建转储文件。
通知 0x4 检测到无提示退出后,将显示弹出通知。

忽略自退出

“忽略自退出”设置可用作应用程序设置,但不能用作全局设置。 可以使用“ 忽略自退出 ”复选框指定是否忽略自退出。

IgnoreSelfExits 注册表项具有以下值之一。

含义
0x0 检测并响应自我终止和跨进程终止。
0x1 忽略自终止。 检测并响应跨进程终止。

监视进程

可以通过在 “监视进程 ”文本框中输入进程名称以及命令行参数来指定监视进程。 可以在命令行中使用以下变量。

Varaible 含义
%e 退出进程的 ID。 这是以无提示方式退出的受监视进程。
%i 发起进程的 ID。 在自我终止的情况下,这与退出过程相同。 对于跨进程终止,这是导致终止的进程 ID。
%t 发起线程的 ID。 这是导致终止的线程。
%c 传递给 ExitThreadTerminateThread 的状态代码。

例如, Monitor Process 的以下值指定在无提示退出时,将启动 WinDbg 并将其附加到退出进程。

windbg -p %e

Monitor Process 命令行存储在 MonitorProcess 注册表项中。

转储文件夹位置

可以使用 转储文件夹位置 文本框指定在检测到无提示退出时写入的转储文件的位置。

Dump 文件夹位置 输入的字符串存储在 LocalDumpFolder 注册表项中。

如果未指定转储文件夹位置,转储文件将写入默认位置,即 %TEMP%\无提示进程退出。

转储文件夹大小

可以使用 转储文件夹大小 文本框指定可写入转储文件夹的最大转储文件数。 以十进制整数形式输入此值。

Dump 文件夹大小 输入的值存储在 MaximumNumberOfDumpFiles 注册表项中。

默认情况下,对可以写入的转储文件数没有限制。

转储类型

可以使用 转储类型 下拉列表指定在检测到无提示退出时写入的转储文件类型 (Micro、Mini、Heap 或 Custom) 。

转储类型存储在 DumpType 注册表项中,这是MINIDUMP_TYPE枚举的成员的按位 OR。 此枚举在 dbghelp.h 中定义,该枚举包含在 Windows 包的调试工具中。

例如,假设你选择了 Micro 的转储类型,并且会看到 DumpType 注册表项的值为 0x88。 值0x88为以下两 个MINIDUMP_TYPE 枚举值的按位 OR。

MiniDumpFilterModulePaths:0x00000080

MiniDumpFilterMemory:0x00000008

如果选择自定义转储类型的转储类型,请在“自定义转储类型”框中输入自己的按位或MINIDUMP_TYPE枚举值。 以十进制整数形式输入此值。

模块忽略列表

可以使用 “模块忽略列表 ”框指定在检测到无提示退出时将被忽略的模块列表。 如果受监视的进程由此列表中的某个模块终止,则忽略无提示退出。

“模块忽略列表 ”框中输入的模块列表存储在 ModuleIgnoreList 注册表项中。

在 事件查看器 中读取进程退出报告

当受监视的进程以无提示方式退出时,监视器会在事件查看器中创建一个条目。 若要打开事件查看器,请输入命令 eventvwr.msc。 导航到Windows日志>应用程序。 查找具有进程退出监视器 的日志条目。

event properties dialog box showing general tab displaying the source as process exit monitor.