我注意到GoogleToolbarNotifier.exe无法从Process Explorer中终止。它返回“访问被拒绝”。它以用户身份运行,以“正常”优先级运行,并且从程序文件运行。

他们是如何做到的呢?

我认为可能有一种方法可以修改ACL或将过程标记为“关键”,但是我似乎找不到任何东西。

更新:

我很认真地找到了答案。 @Alex K.是正确的,因为已删除该过程的PROCESS_TERMINATE权限,但是我想用代码提供答案:

static const bool ProtectProcess()
{
    HANDLE hProcess = GetCurrentProcess();
    EXPLICIT_ACCESS denyAccess = {0};
    DWORD dwAccessPermissions = GENERIC_WRITE|PROCESS_ALL_ACCESS|WRITE_DAC|DELETE|WRITE_OWNER|READ_CONTROL;
    BuildExplicitAccessWithName( &denyAccess, _T("CURRENT_USER"), dwAccessPermissions, DENY_ACCESS, NO_INHERITANCE );
    PACL pTempDacl = NULL;
    DWORD dwErr = 0;
    dwErr = SetEntriesInAcl( 1, &denyAccess, NULL, &pTempDacl );
    // check dwErr...
    dwErr = SetSecurityInfo( hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pTempDacl, NULL );
    // check dwErr...
    LocalFree( pTempDacl );
    CloseHandle( hProcess );
    return dwErr == ERROR_SUCCESS;
}

最佳答案

运行该拷贝时,在“终止”权限上设置了“拒绝”(Process Explorer会显示此信息)。

大概他们在进程加载时调用 SetKernelObjectSecurity 来更改/删除ACL。

10-05 22:41