叮当猫咪
如果要防止用户从任务管理器中终止进程,则可以仅在进程上使用安全描述符来拒绝终止对所有人的访问。从技术上讲,管理员仍然可以通过拥有该进程的所有权并重置DACL来终止该进程,但是任务管理器中没有界面可以执行这些操作。Process Explorer可能有一个接口。当您的进程开始时,请使用SetKernelObjectSecurity和DACL_SECURITY_INFORMATION当前进程句柄。使用零个ACL设置DACL。这将拒绝所有人的所有访问,包括那些试图通过任务管理器结束您的过程的人。这是一个示例,它也更改了流程的所有者:SECURITY_DESCRIPTOR sd;ACL dacl;SID_IDENTIFIER_AUTHORITY ntauth = SECURITY_NT_AUTHORITY;PSID owner;assert(InitializeAcl(&dacl, sizeof dacl, ACL_REVISION));assert(AllocateAndInitializeSid(&ntauth, 1, SECURITY_LOCAL_SYSTEM_RID, 0,0,0,0,0,0,0, &owner));assert(InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION));assert(SetSecurityDescriptorDacl(&sd, TRUE, &dacl, FALSE));assert(SetSecurityDescriptorOwner(&sd, owner, FALSE));assert(SetKernelObjectSecurity(GetCurrentProcess(), DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION, &sd));assert(FreeSid(owner) == NULL);不幸的是,它似乎并不有效。我仍然可以关闭该过程(尽管不是受限用户)。也许任务管理器正在获得所有权或调用其他特权来终止进程?我似乎还记得在以前的Windows版本(我正在测试2003)中可以使用的功能,但是我可能会误会。