模拟后从映射的驱动器号获取UNC路径

时间:2011-04-27 07:05:07

标签: c++ windows unc mapped-drive

如果我调用函数WNetGetUniversalName()从当前会话中映射的驱动器获取UNC路径,则该函数成功。

但是...

  • 如果我通过调用LogonUser()创建新的登录站点(登录用户与流程创建者相同)
  • 通过调用ImpersonateLoggedOnUser()函数
  • 模拟已登录用户
  • 再次调用WNetGetUniversalName(),函数返回错误2250(ERROR_NOT_CONNECTED

问题是我应该将此进程作为服务运行(在SYSTEM帐户中),因此我可能需要模拟用户获取该用户和相关网络路径的映射驱动器。在我检查时,无法跨用户会话访问信息。

Windows在哪里存储此信息,以便在用户登录时可以重新映射驱动器?我发现映射的网络路径历史记录保存在密钥:HKEY_USERS\<User SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU下的注册表中,但是它没有说明当用户将返回以及相关的驱动器号时是否将映射UNC路径。

请帮忙。

1 个答案:

答案 0 :(得分:0)

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