Windows下切换进程用户名为当前用户名,而不是SYSTEM

在windows操作系统中,某些情况下,我们需要将程序以管理员身份启动,通过任务管理器我们可以看到程序的持有者,如下图所示:
在这里插入图片描述
使用SYSYTEM权限启动的程序,理论是不可以访问到当前用户下的部分目录,这个时候我们可以在必要时候切换成武到当前用户权限,使用后切换为SYSTEM。

  • 首先判断用户名是不是SYSTEM
bool CurrentUserIsLocalSystem()    //判断用户名是不是SYSTEM
{
    BOOL bIsLocalSystem = FALSE;
    PSID psidLocalSystem;
    SID_IDENTIFIER_AUTHORITY ntAuthority = SECURITY_NT_AUTHORITY;

    BOOL fSuccess = ::AllocateAndInitializeSid(&ntAuthority, 1, SECURITY_LOCAL_SYSTEM_RID,
                                        0, 0, 0, 0, 0, 0, 0, &psidLocalSystem);
    if (fSuccess) 
    {
        fSuccess = ::CheckTokenMembership(0, psidLocalSystem, &bIsLocalSystem);
        ::FreeSid(psidLocalSystem);
    }
    return bIsLocalSystem;
}
  • 切换进程为当前用户
HANDLE hTokenUser = NULL;
DWORD ConsoleSessionId = 0;
BOOL bImpersonateLoggedOnUser = FALSE;
if (CurrentUserIsLocalSystem())
{
	// 得到当前激活用户的会话ID
  	ConsoleSessionId = WTSGetActiveConsoleSessionId();
  	// 得到当前登录用户的令牌
  	if (WTSQueryUserToken(ConsoleSessionId, &hTokenUser))
  	{
      	// 模仿成当前登录用户
      	bImpersonateLoggedOnUser = ImpersonateLoggedOnUser(hTokenUser);
  	}
}
  • 使用完毕后切换为SYSTEM权限
(bImpersonateLoggedOnUser)  
{  
    RevertToSelf();  
}  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值