RtlSetProcessIsCritical与NtSetInformationProcess:设置关键进程该调用哪个?
Windows XP下设置关键进程:选RtlSetProcessIsCritical还是NtSetInformationProcess?
在Windows XP环境下,直接用RtlSetProcessIsCritical就好——你已经测试过它能用,那些说这个函数首次出现于Windows 8的信息是错误的,它在XP里早就存在,只是微软没公开正式文档而已。
二者的核心差异
- RtlSetProcessIsCritical是高层封装函数(属于
ntdll.dll),专门用来设置进程的关键状态,调用方式更简单:只需要传入一个布尔值(标记是否设为关键进程),还可以选一个指针接收之前的状态。它本质上是对NtSetInformationProcess的封装,帮你省掉了构造结构体的步骤。 - NtSetInformationProcess是底层系统调用(同样在
ntdll.dll),是微软公开文档化的函数。要设置关键进程,你需要指定ProcessInformationClass为ProcessBreakOnTermination(对应数值0x1D),然后构造PROCESS_BREAK_ON_TERMINATION_INFORMATION结构体,把BreakOnTermination字段设为TRUE。
简单说,RtlSetProcessIsCritical是NtSetInformationProcess的“快捷方式”,功能完全一致,只是前者用起来更省心。在XP里两个都能用,但既然你已经验证了RtlSetProcessIsCritical可行,直接用它就行。
内容的提问来源于stack exchange,提问作者adffwef
相关产品推荐
相关产品推荐

