确定流程是否与系统相关

Phi*_*ins 2 c++ windows winapi process

我有一个HANDLE进程,想知道该进程是否与系统相关,就像下图中的任务管理器所做的那样。

如果我尝试通过任务管理器关闭这样的进程,它会要求我关闭整个计算机或取消。(我没有找到任何与此相关的内容)

Pau*_*ers 5

此类进程的“内部”术语是“关键进程”,也就是说,Windows 需要始终运行才能正常运行的进程。一个很好的例子是管理登录屏幕的进程(WinLogon)——没有它就不能做很多事情。

Raymond Chen最近写了一篇关于此的博文。除其他外,他还想说:

  1. IsProcessCritical()确定指定进程是否被视为关键进程。

  2. 除此之外,任务管理器还保留一个硬编码的进程列表,只要看到它们,就会将其放入“Windows 进程”列表中,例如控制台窗口主机(托管用于运行控制台应用程序的窗口)和桌面窗口管理器。

我不知道你如何获得该列表的内容。

Raymond 在他的博客中更详细地介绍了关键流程的实际含义。如果您想蓝屏您的计算机,请尝试在“详细信息”选项卡中终止其中一个。

  • 在 Windows 8 之前,IsProcessCritical() 例程不可用(当时尚未实现),因此对于 Windows 7 或更低版本,您必须使用 NtQueryInformationProcess 例程(NTDLL 为其导出一个例程,该例程将执行系统调用)来检查 BreakOnTermination 标志的值。另外,作为旁注,您还可以通过 NtQueryInformationThread 检查特定线程是否“关键”(同时检查 BreakOnTermination 标志)。如果删除 BreakOnTermination 标志上的设置,您仍然可以终止关键进程。 (4认同)
  • 尽管如果您要终止关键进程而不调用 BSOD,系统将无法正常工作,具体取决于您的目标。无论如何,用外行人的话来说,关键进程是指如果它在设置了关键状态的情况下被终止,Windows 内核将调用 KeBugCheckEx 并强制发生 BSOD 崩溃。 (3认同)