使用用户的过滤令牌模拟线程

时间:2012-11-30 21:10:28

标签: windows winapi uac local-security-authority

我正在编写一个应用程序,这是一种自定义的企业设置。 这个应用程序执行了很多任务,其中一些需要提升。

我添加了一个清单,以便当应用启动时,UAC会要求用户提升。

其中一项任务是将某些网络驱动器(带WNetAddConnection)映射到远程服务器。 这些映射应该是持久的。 到目前为止一切都那么好,除了应用程序关闭时,用户无法看到应用程序刚刚映射的驱动器。

经过一些研究(https://serverfault.com/a/185885/147818)后,我了解到当用户登录时,会话会收到2个令牌,一个具有低权限,另一个具有完全权限,另一个用于在提升时运行进程是必需的。

我的问题:我的应用程序是否可能启动一个获取当前用户过滤令牌的线程,当应用程序的任务完成时,用户可以在资源管理器中看到网络驱动器?

是否可以使用此令牌模拟线程?

我知道这些可行的解决方法:

  • 重新设计应用程序,以便只有一些需要提升的特定任务才会封装在COM对象中。
  • 使用EnableLinkedConnections设置调整注册表(需要用户重启会话)

但由于某些原因,这些解决方案都不是一种选择。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

从我们提升的安装程序映射驱动器时遇到了同样的问题。

我们处理此问题的方式是首先映射安装程序中的驱动器,该驱动程序当然在提升 UAC状态下运行。安装程序最后做的是创建一个文本文件,列出驱动器号及其映射的网络驱动器。然后我们运行第二个程序 non-elevated ,为用户执行映射。这些映射是持久的。

这对我们来说在全球范围内为客户的机器安装了数千个。