C++ 模拟后从映射的驱动器号获取UNC路径
如果调用函数C++ 模拟后从映射的驱动器号获取UNC路径,c++,windows,unc,mapped-drive,C++,Windows,Unc,Mapped Drive,如果调用函数WNetGetUniversalName()从当前会话中映射的驱动器获取UNC路径,则函数将成功 但是 如果我通过调用LogonUser()创建新的登录会话(登录用户与流程创建者相同) 通过调用ImpersonateLoggedOnUser()函数来模拟登录用户 再次调用WNetGetUniversalName(),函数返回错误2250(error\u NOT\u CONNECTED) 问题是,我应该将此进程作为服务(在系统帐户中)运行,因此我可能需要模拟用户以获取该用户的映射驱
WNetGetUniversalName()
从当前会话中映射的驱动器获取UNC路径,则函数将成功
但是
- 如果我通过调用
创建新的登录会话(登录用户与流程创建者相同)LogonUser()
- 通过调用
函数来模拟登录用户ImpersonateLoggedOnUser()
- 再次调用
,函数返回错误2250(WNetGetUniversalName()
)error\u NOT\u CONNECTED
HKEY\U USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\Map network Drive MRU
,但它没有说明用户重新登录时是否映射UNC路径以及相关的驱动器号
请帮助。如果我没有记错,我相信这些驱动器映射存储在登录会话中。因为LogonUser()创建了一个新的登录会话,所以它不会有驱动器映射;您必须将ImpersonalLoggedOnUser()与现有令牌一起使用。windows没有一个地方存储此信息,这取决于您的网络设置。驱动器通常通过组策略或登录脚本进行映射。谢谢。正如我所说,进程将作为服务(在系统帐户中)运行,用户不得登录。每当用户映射网络驱动器时,都会有一个选项“登录时重新连接”。因此Windows必须为下次登录保存此信息。可能,解决方案根本不需要模拟。我仍在寻找答案。如果用户未登录,则不会加载其配置文件。您可以显式地加载它,但这是一种不好的做法,因为在加载它的同时尝试登录会产生不好的结果。