gpt4 book ai didi

c - 如果由服务映射,则网络驱动器不可用

转载 作者:可可西里 更新时间:2023-11-01 13:29:28 27 4
gpt4 key购买 nike

我创建了一个定义为以管理员身份登录的服务。
该服务执行 system("net use Z:\.../user:user password") 并成功完成。

如果我(作为管理员)运行“网络使用”,我会看到 Z:确实已添加,但状态为 - 不可用。

我尝试添加 ImpersonateLoggedOnUser到服务,但这没有帮助。

操作系统:Windows XP

我错过了什么?

最佳答案

ImpersonateLoggedOnUser 不会从用户 token 模拟登录 session ,只是模拟安全上下文。但是,CreateProcessAsUser 应该能够在与指定用户 token 关联的登录 session 中创建新进程。

请注意,调用 LogonUser 以获取 CreateProcessAsUser 的用户 token 将不起作用,因为此 token 不会与已登录用户处于同一登录 session 中。您必须找到用户的进程之一并复制其 token 。

登录 session 没有很好的记录,但您真正需要知道的是,每次用户通过身份验证时都会创建一个不同的登录 session ,并且每个此类登录 session 都有一组不同的网络驱动器映射。登录 session 与终端服务 session 不同。

在 Windows Vista 及更高版本中,当管理用户登录时会创建两个登录 session ,一个与受限 token 关联,一个与提升 token 关联。

您可以使用带有 TokenStatistics 选项的 GetTokenInformation 函数来查找与 token 关联的登录 session 。登录 session 由 AuthenticationId LUID 标识。

要实现此功能,您的服务需要首先确定用户何时登录,等待与新 session 关联的进程启动,确保它不是提升的进程,然后复制访问 token 。

相反,您最好的选择是将应用程序拆分为两个组件。一个组件将作为用户运行(您可能会使用运行键自动启动它)并负责映射网络驱动器。它可以通过命名管道或注册表项联系服务以获取所需的任何信息。

关于c - 如果由服务映射,则网络驱动器不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com