我有一个驱动程序,可以通过使用PsSetCreateProcessNotifyRoutine调用在进程开始时发送APC调用来篡改用户空间进程。我希望避免篡改任何对操作系统稳定性至关重要的进程,因为我APC也最终决定终止该进程。

到目前为止,我已经使用PsIsProtectedProcessPsIsProtectedProcessLight来检测受保护的进程。

但是,似乎有些过程,例如smss.execrss.exewininit.exe被定义为关键过程,我也希望避免使用它们。

也许任何人都知道受保护的进程和关键进程之间的区别,以及如何从内核模式(可能在EPROCESS中具有临时字段)以​​编程方式检测关键进程?

感谢,

#1 楼

似乎正确的术语是关键系统服务。有来自userland的API,但是我找不到用于内核的任何东西。因此,我快速浏览了RstrtMgr.dll,似乎该列表实际上是硬编码的。对于进程:


system32 \ csrss。 exe
system32 \ smss.exe
system32 \ lsass.exe
system32 \ wininit.exe
system32 \ services.exe
system32 \ winlogon.exe

对于服务(svchost.exe的特定情况):


BrokerInfrastructure
DcomLaunch
电源
RpcEptMapper
RpcSs
SamSs

可能有另一种方法可以实现。毕竟,如果杀死了这些进程之一,则Windows BSOD。 />如果将此位置1,则nt!EPROCESS::BreakOnTermination将对nt!EPROCESS::Flags进行BSOD。