Winapi 避免UAC,但使用windows服务启动提升的进程

Winapi 避免UAC,但使用windows服务启动提升的进程,winapi,uac,elevated-privileges,Winapi,Uac,Elevated Privileges,我有一个非交互式服务,作为Windows机器上的特权系统用户运行,我需要它作为提升进程启动给定的可执行文件 我使用WTSGetActiveConsoleSessionId()成功地启动了一个子进程作为系统,找到了一个系统进程并复制了它的令牌。类似地,我可以作为普通用户启动非提升流程。但是我需要以普通用户的身份启动该流程,但是要有更高的权限,这样我就不必显示UAC,而是以合适的用户身份运行该流程 我没有试图绕过UAC,因为用户已经同意安装该服务。我正在设法减轻一个不便。我找到了一个-但再次询问,希

我有一个非交互式服务,作为Windows机器上的特权系统用户运行,我需要它作为提升进程启动给定的可执行文件

我使用WTSGetActiveConsoleSessionId()成功地启动了一个子进程作为系统,找到了一个系统进程并复制了它的令牌。类似地,我可以作为普通用户启动非提升流程。但是我需要以普通用户的身份启动该流程,但是要有更高的权限,这样我就不必显示UAC,而是以合适的用户身份运行该流程


我没有试图绕过UAC,因为用户已经同意安装该服务。我正在设法减轻一个不便。我找到了一个-但再次询问,希望能得到答案。

如果您有一个交互式用户的过滤令牌(例如,通过检索的令牌),您可以检索未过滤的(“提升的”)通过使用带有TokenLinkedToken选项的函数获取令牌。

假设您使用WTSQueryUserToken为交互用户获取令牌,并且交互用户是管理员,则您应该能够使用带有TokenLinkedToken选项的GetTokenInformation获取提升的令牌。附带说明,这应该是可能的(而且效率更高)复制您自己的系统令牌,然后使用SetTokenInformation和TokenSessionId选项更改会话ID,以此作为系统启动子进程。@HarryJohnston感谢您的想法!链接的令牌想法可以工作。如果您将其转换为答案,我可以将其标记为已接受。@Liosan:我有类似的问题。我必须启动此过程ss在所有活动会话中。为此,我使用WTSEnumerateSessions()获取所有活动会话并启动进程。但我想在该会话中以管理员模式运行进程(以管理员身份运行)。您能告诉我如何操作吗。要获取会话令牌,我使用了WTSQueryUserToken()API并启动进程,我使用了CreateProcessAsUser()我的服务也是本地服务。