dal*_*lle 3 impersonation winapi multithreading sspi
正在ImpersonateSecurityContext服务器上进行调用,以在调用线程上或整个过程中模拟客户端。该文档在此问题上含糊不清,因为它指出“该函数创建模拟令牌,并允许线程或进程在模拟上下文中运行”。
我假设模拟仅适用于调用线程,其他任何事情都会很奇怪,但是我想确定。
每个MSDN:
模拟是线程使用与拥有线程的进程不同的安全性信息执行的能力。通常,服务器应用程序中的线程模拟了客户端。这允许服务器线程代表该客户端执行操作,以访问服务器上的对象或验证对客户端自己的对象的访问。
Microsoft Windows API提供以下功能来开始模拟:
...-
安全软件包或应用程序服务器可以调用该ImpersonateSecurityContext功能来模拟客户端。
因此,模拟是在每个线程的基础上完成的。
可以使用模拟来以模拟用户的身份生成新进程(通过使用DuplicateTokenEx()和CreateProcessAsUser()),但是模拟绝不会使调用进程以模拟用户的身份运行,只有调用线程才能运行。
在服务器上下文中,可以同时连接多个客户端,如果将客户端模拟应用于整个流程范围的基础上将非常危险。