通过命令行(Windows)修改进程(非服务)级别权限-使非管理员用户无法终止进程

通过命令行(Windows)修改进程(非服务)级别权限-使非管理员用户无法终止进程

目标:

在我的 PC 上,有一个后台脚本(进程 A),它在启动时以管理员级别权限在标准级别帐户(帐户 X)上运行。我想使用此脚本及其提升的权限来修改进程级权限在帐户 X 启动时运行的进程(进程 B)。

目标是使流程 B 可由帐户 X 终止,但仍然由帐户 X 启动。

背景:

这很容易实现进程探索器,但这是一个 GUI 程序。网上有一些关于通过命令行更改权限的资料,但这些资料适用于服务,而不是进程。

具体来说,我需要添加终止进程时的拒绝权限,以及将进程 B 的权限更改为帐户 X。

概括:

  • 通过以管理员帐户运行的任务计划程序登录(进入帐户 X)时启动进程 A
  • 进程 B 由账户 X 启动
  • 帐户 X 是标准级别帐户
  • 我可以使用 Process Explorer 手动添加我所描述的拒绝权限,但我希望 Process A 自己执行此操作(也许通过命令行)。

答案1

以管理员权限运行的程序可以修改进程 ACL 以删除 PROCESS_TERMINATE 权限。

用 C++ 编写的示例 这个帖子

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;
}

关于此代码的更多问题应该在 StackOverflow 上询问。

相关内容