【问题标题】:Create thread with specific privilege c++创建具有特定权限 c++ 的线程
【发布时间】:2009-12-09 13:12:06
【问题描述】:

我有一个多线程应用程序,我想创建一个具有不同用户权限的线程(例如:多域管理员权限)。

但我找不到任何 Win32 API CreateThread 来执行此操作。

如何创建具有特定用户权限的线程?

谢谢。

【问题讨论】:

    标签: c++ winapi visual-c++ multithreading


    【解决方案1】:

    使用CREATE_SUSPENDED 标志调用 CreateThread(),然后调用 SetThreadToken(),然后调用 ResumeThread()。

    【讨论】:

      【解决方案2】:

      通过以指定用户身份登录线程,从您希望拥有特定用户权限的线程调用它:

      HANDLE hToken;
      BOOL bRet = LogonUser("username","domain","password",
          LOGON32_LOGON_INTERACTIVE,
          LOGON32_PROVIDER_DEFAULT,&hToken);
      if(!bRet)
          // Add your own fault handling here
          return MessageBox(NULL,"Could not log on","Error",MB_OK|MB_ICONSTOP);
      bRet = ImpersonateLoggedOnUser(hToken);
      if(!bRet)
          // Add your own fault handling here
          return MessageBox(NULL,"Could not impersonate","Error",MB_OK|MB_ICONSTOP);
      

      【讨论】:

      • 这行不通。即使进程被模拟,新生成的线程也会以父进程的用户权限运行。所以在挂起模式下创建线程,设置线程令牌(一个模拟令牌)然后恢复(ResumeThread())就是soln
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2021-01-12
      • 2013-12-08
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多