监视静默进程退出

从 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

报告模式

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

启动监视进程启用转储收集启用通知ReportingMode 注册表项是以下标志的按位 OR。

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

忽略自退出

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

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

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

监视进程

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

Varaible 含义
%e 正在退出进程的 ID。 这是以静默方式退出的受监视进程。
%i 启动进程的 ID。 对于自终止,这与退出进程相同。 对于跨进程终止,这是导致终止的进程 ID。
%t 启动线程的 ID。 这是导致终止的线程。
%c 传递给 ExitThreadTerminateThread 的状态代码。

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

windbg -p %e

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

转储文件夹位置

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

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

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

转储文件夹大小

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

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

默认情况下,可以写入的转储文件限制为 10 个。

转储类型

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

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

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

MiniDumpFilterModulePaths:0x00000080

MiniDumpFilterMemory:0x00000008

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

模块忽略列表

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

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

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

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

带有“常规”选项卡的事件属性对话框,将源显示为“进程退出监视器”。