【发布时间】:2011-09-05 08:54:40
【问题描述】:
我注意到 GoogleToolbarNotifier.exe 无法从 Process Explorer 中杀死。它返回“拒绝访问”。它以用户身份运行,以“正常”优先级运行,并从 Program Files 运行。
他们是怎么做到的?
我认为可能有办法修改 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;
}
【问题讨论】:
-
它是否以管理员权限运行而 PE 不是?
-
PE 以管理员(提升)权限运行。进程是普通的非管理员用户。
-
效果很好,谢谢。您应该将其发布为答案并接受它
-
您不能关闭 GetCurrentProcess 检索到的进程句柄,因为它是一个伪句柄。
-
请在答案中发布您的答案,而不是在问题中。