Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模拟后从映射的驱动器号获取UNC路径_C++_Windows_Unc_Mapped Drive - Fatal编程技术网

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()
    函数来模拟登录用户
  • 再次调用
    WNetGetUniversalName()
    ,函数返回错误2250(
    error\u NOT\u CONNECTED
问题是,我应该将此进程作为服务(在系统帐户中)运行,因此我可能需要模拟用户以获取该用户的映射驱动器和关联的网络路径。正如我所检查的,这些信息不能跨用户会话访问

Windows在哪里存储此信息,以便在用户重新登录时可以重新映射驱动器?我发现映射的网络路径历史记录保存在注册表项下:
HKEY\U USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\Map network Drive MRU
,但它没有说明用户重新登录时是否映射UNC路径以及相关的驱动器号


请帮助。

如果我没有记错,我相信这些驱动器映射存储在登录会话中。因为LogonUser()创建了一个新的登录会话,所以它不会有驱动器映射;您必须将ImpersonalLoggedOnUser()与现有令牌一起使用。

windows没有一个地方存储此信息,这取决于您的网络设置。驱动器通常通过组策略或登录脚本进行映射。谢谢。正如我所说,进程将作为服务(在系统帐户中)运行,用户不得登录。每当用户映射网络驱动器时,都会有一个选项“登录时重新连接”。因此Windows必须为下次登录保存此信息。可能,解决方案根本不需要模拟。我仍在寻找答案。如果用户未登录,则不会加载其配置文件。您可以显式地加载它,但这是一种不好的做法,因为在加载它的同时尝试登录会产生不好的结果。