3

如果我调用函数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 路径以及相关的驱动器号。

请帮忙。

4

1 回答 1

0

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

于 2011-04-27T14:28:08.160 回答