C++ 如何获取特定域用户';s访问令牌?

C++ 如何获取特定域用户';s访问令牌?,c++,active-directory,dns,access-token,C++,Active Directory,Dns,Access Token,我是Active Directory域管理员,如何获取特定域用户的访问令牌?我想使用此用户的访问令牌从仅向该用户打开的共享文件夹中获取一些数据。如果用户已登录,并且您想使用其令牌模拟他,则该过程为: 使用wtsenumeratessions在循环中列出系统的所有活动用户 如果用户是您想要的,请使用PWTS\u SESSION\u INFOINFO进行比较 如果用户匹配,则使用WTSQueryUserToken获取用户的令牌。此Api需要会话ID,您将从调用WTSEnumerateSessions

我是Active Directory域管理员,如何获取特定域用户的访问令牌?我想使用此用户的访问令牌从仅向该用户打开的共享文件夹中获取一些数据。

如果用户已登录,并且您想使用其令牌模拟他,则该过程为:

  • 使用
    wtsenumeratessions
    在循环中列出系统的所有活动用户

  • 如果用户是您想要的,请使用
    PWTS\u SESSION\u INFO
    INFO进行比较

  • 如果用户匹配,则使用
    WTSQueryUserToken
    获取用户的令牌。此Api需要会话ID,您将从调用
    WTSEnumerateSessions
    struct时在步骤1中获得的
    PWTS\u session\u INFO

  • 使用DuplicateTokenEx复制令牌,然后使用ImpersonateLoggedOnUser模拟该用户

  • 复制文件等做工作

  • 回归自我

  • 如果用户未登录,而您希望模拟并使用其凭据执行工作,则:

  • 使用
    LogonUser
    API获取令牌,然后从上面的选项执行步骤4

  • 我有一些问题。。WTSEnumerateSessions似乎用于检索活动用户会话。但是我如何确定域用户正在访问此共享文件夹?此外,此方法不使用我的域管理员权限,是否可以在没有该权限的情况下获取域用户的访问令牌?您应该是计算机上的管理员才能执行管理员任务。WTS服务API提供登录到计算机的用户的令牌。如果用户没有登录,那么您可以获得作为该管理员用户运行的进程的令牌。然后复制令牌并使用它。如果该用户未登录,并且没有进程作为该用户运行,那么您需要知道他的凭据。使用LogonUser API使用凭据可以获得令牌。通过此操作,您将生成一个新的令牌.Thx用于应答。。我不是远程计算机的管理员,而是远程计算机所在的Active Directory域的管理员。我的软件所在的机器类似于域控制器。如果WTS API要检索DC本身上的会话,我认为很可能无法实现。。我也想到了LogonUser,但我不知道域用户的密码?是否有一些不知道密码的登录方法?WTS API从当前机器(即运行软件的机器,而不是DC)检索令牌。如果您是域管理员,那么您应该可以访问其他域用户可以访问的文件夹,因为您是域管理员,如果权限被拒绝,您可以启用这些权限。作为管理员,如果用户作为该用户登录或计算机上正在运行某个进程,则可以获取该用户的令牌。只有当用户在计算机上经过身份验证并登录或某个进程以该用户身份运行时,才会创建令牌。否则没有令牌。我是域管理员。但是,如果samba服务器没有在文件夹属性的“共享”选项卡中给我文件夹的读取权限,我仍然无法访问它或读取它的权限。通过以“共享”选项卡中允许的用户身份登录,我可以成功读取它的权限。下面是我的另一个线程,解释了为什么我需要访问令牌。