在调用ImpersonateSecurityContext
线程或整个进程中模拟客户端的服务器上调用。该文档对此事有点含糊,因为它声明“该函数创建一个模拟令牌并允许线程或进程在模拟上下文中运行”。
我认为模拟仅适用于调用线程,其他任何事情都会很奇怪,但我想确定一下。
在调用ImpersonateSecurityContext
线程或整个进程中模拟客户端的服务器上调用。该文档对此事有点含糊,因为它声明“该函数创建一个模拟令牌并允许线程或进程在模拟上下文中运行”。
我认为模拟仅适用于调用线程,其他任何事情都会很奇怪,但我想确定一下。
根据 MSDN:
模拟是线程使用与拥有线程的进程不同的安全信息执行的能力。通常,服务器应用程序中的线程模拟客户端。这允许服务器线程代表该客户端访问服务器上的对象或验证对客户端自己对象的访问。
Microsoft Windows API 提供以下函数来开始模拟:
...
- 安全包或应用程序服务器可以调用该ImpersonateSecurityContext
函数来模拟客户端。
所以模拟是在每个线程的基础上完成的。
模拟可用于作为模拟用户生成一个新进程(通过使用DuplicateTokenEx()
and CreateProcessAsUser()
),但模拟永远不会使调用进程作为模拟用户运行,只有调用线程。
在服务器上下文中,可以同时连接多个客户端,如果在进程范围的基础上应用客户端模拟,那将是非常危险的。