GK.*_*GK. 5 c windows service networking
我创建了一个定义为以管理员身份登录的服务.
此服务执行系统("net use Z:\ .../user:user password")并成功完成.
如果我(作为管理员)运行"净使用",我看到Z:确实添加了,但状态 - 不可用.
我尝试将ImpersonateLoggedOnUser添加到服务中,但这没有帮助.
操作系统:Win XP
我错过了什么?
ImpersonateLoggedOnUser不会模拟用户令牌的登录会话,只会模拟安全上下文.但是,CreateProcessAsUser应该能够在与指定用户令牌关联的登录会话中创建新进程.
请注意,调用LogonUser获取CreateProcessAsUser的用户令牌将不起作用,因为此令牌不会与登录用户位于同一登录会话中.您必须找到用户的一个进程并复制其令牌.
登录会话没有详细记录,但您真正需要知道的是,每次用户通过身份验证时,都会创建一个不同的登录会话,并且每个此类登录会话都有一组不同的网络驱动器映射.登录会话与终端服务会话不同.
在Windows Vista及更高版本中,管理用户登录时会创建两个登录会话,一个与受限令牌关联,另一个与升级令牌关联.
您可以使用带有TokenStatistics选项的GetTokenInformation函数查找与令牌关联的登录会话.登录会话由AuthenticationId LUID标识.
为了使这项工作,您的服务需要首先确定用户何时登录,等待与新会话关联的进程启动,确保它不是提升的进程,然后复制访问令牌.
相反,您最好的选择是将应用程序拆分为两个组件.一个组件将以用户身份运行(您可能会使用Run键自动启动它)并负责映射网络驱动器.它可以通过命名管道或注册表项联系服务以获取所需的任何信息.
| 归档时间: |
|
| 查看次数: |
2553 次 |
| 最近记录: |