是否每个线程都在Win32中进行模拟?

时间:2015-01-19 11:20:22

标签: multithreading winapi impersonation sspi

在服务器上调用ImpersonateSecurityContext模拟调用线程上的客户端或整个进程。 documentation在这个问题上有点模糊,因为它声明“该函数创建一个模拟令牌并允许线程或进程与模拟上下文一起运行”

我认为假冒只针对调用线程,其他任何事情都会很奇怪,但我想确定。

1 个答案:

答案 0 :(得分:5)

每个MSDN:

Client Impersonation

  

模拟是使用与拥有该线程的进程不同的安全信息执行线程的能力。通常,服务器应用程序中的线程模拟客户端。这允许服务器线程代表该客户端访问服务器上的对象或验证对客户端自己对象的访问。

     

Microsoft Windows API提供以下功能来开始模拟:
  ...
   - 安全包或应用程序服务器可以调用ImpersonateSecurityContext函数来模拟客户端。

因此,模拟是基于每个线程完成的。

模拟可用于以模拟用户的身份生成新流程(使用DuplicateTokenEx()CreateProcessAsUser())但模拟永远不会使调用进程作为模拟用户运行,只调用线程

在服务器上下文中,可以同时连接多个客户端,如果在进程范围的基本上应用客户端模拟,则会非常危险。