【发布时间】:2011-08-13 14:57:17
【问题描述】:
如果我调用函数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 路径以及相关的驱动器号。
请帮忙。
【问题讨论】:
-
Windows 没有一个地方存储此信息,这取决于您的网络设置。驱动器最常通过组策略或登录脚本映射。
标签: c++ windows unc mapped-drive