想象一下,我有一个现有的进程作为一个特定的用户在Windows下运行。 是否允许该进程将当前标记(类似于OpenThreadToken和DuplicateTokenEx)传递给同一台机器上的另一个进程(可能通过networking套接字或其他IPC),然后期望该进程能够使用它来调用CreateProcessAsUser?
从我已阅读的文档( http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx ),我什么也没有看到禁止这个,但也许令牌只能用通过创build它的线程或进程。
(为什么你要?我想有一个Web请求来到IIS,进行身份validation,让IIS安排模拟远程用户,然后将模拟令牌传递到另一个服务器进程(在同一台机器上),以便服务器进程可以在远程用户的上下文中执行一些安全检查)
是的,这是可能的。 您可以使用DuplicateHandle获取对目标进程有效的句柄(将新句柄值发送到目标进程,以便知道它)。 但是,目标进程仍然必须具有相应使用令牌的权限。 例如SE_IMPERSONATE模拟用户,并由CPAU使用SE_ASSIGN_PRIMARY。 当然,您可以在MSDN中为ImpersonateLoggedOnUser和CPAU读取一些例外。
我没有尝试过,但似乎这是在这里问的同一个问题。 说明似乎是有道理的。 通过您选择的任何机制(例如IPC)传递进程ID,然后调用OpenProcess , OpenProcessToken ,最后调用ImpersonateLoggedOnUser 。 生成的句柄可以传递给CreateProcessAsUser。 那么…我知道它可以传递给这个函数,但它是否会有我不知道的理想结果。 有趣的问题,虽然。
为什么不使用命名管道,然后调用ImpersonateNamedPipeUser() – 这是安全和可靠的! 请注意,进行模拟的过程必须具有模拟特权。