【发布时间】:2014-06-25 12:07:08
【问题描述】:
我正在编写一个作为 Windows 服务(Win XP、Vista、7、8、服务器)运行的 C++ 应用程序。
我的应用程序使用将本地文件夹映射到驱动器的第三方库,并且该驱动器应该在用户模式下可用(适用于所有用户)。当用户将某些网络共享映射到本地驱动器并且第三方库无法识别该指定的驱动器号已在使用时,就会出现此问题。
问题是如何确定(从服务应用程序)所需的驱动器号是否肯定可用?
我正在使用
GetLogicalDrives
QueryDosDevice
确定逻辑设备。我试过了
WNetGetConnection
WNetGetUniversalName
检索有关网络共享的信息,但这些函数不会返回所需驱动器号的任何内容,尽管存在映射到指定驱动器号的共享。
我的猜测是问题出在特权上。由于我的应用程序作为服务运行,它无法获取有关在用户模式下映射的共享的信息(这对我来说似乎很奇怪)。
那么最后一个问题是——如何检测指定的驱动器号是否未被任何用户用于映射网络共享?
【问题讨论】:
-
您是否尝试过在该用户的上下文(登录身份)下运行的服务?
-
我做了并且应用程序检测到使用 subst 映射的共享,但它没有检测到使用资源管理器的“映射网络驱动器”映射的共享
标签: c++ windows winapi windows-services network-share