使用ImpersonateLoggedOnUser
Windows API模拟当前用户后,是否无法从服务访问映射的网络驱动器(在用户会话中映射)?
答案 0 :(得分:2)
是的,这是不可能的。仅在交互式登录期间建立驱动器映射。 ImpersonateLoggedOnUser
函数不会模拟用户的整个登录会话,只会模拟其安全上下文。这只是使用模拟无法完成的one of the many things。
我认为您可能能够通过复制用户的登录令牌(从其中一个交互式进程获取),然后使用它来调用CreateProcessAsUser
函数来完成此操作。然后,您将启动一个可以使用映射的网络驱动器的进程。我不是绝对肯定这会起作用,因为我从来没有这样做过,但理论上似乎有可能。
当然,它引出了为什么你需要遵循这样一条迂回路线的问题。作为标准的Windows应用程序,首先在用户的交互式过程中运行代码是非常明智的。
这不是服务旨在做的事情。服务不支持映射的网络驱动器。如果要从服务中访问网络资源,则应使用UNC路径。