检测不用于映射网络共享的驱动器号

时间:2014-05-08 07:59:46

标签: c++ windows winapi windows-services network-share

我正在编写一个以Windows服务(Win XP,Vista,7,8,服务器)运行的C ++应用程序。
我的应用程序使用第三个patry库将本地文件夹映射到驱动器,此驱动器应该在用户模式下可用(适用于所有用户)。当用户将某些网络共享映射到本地驱动器并且第三方库无法识别已使用的指定驱动器号时,会出现此问题。
问题是如何确定(来自服务申请)是否有必要的驱动器号可用? 我正在使用

GetLogicalDrives
QueryDosDevice

确定逻辑设备。我试过了

WNetGetConnection
WNetGetUniversalName

检索有关网络共享的信息,但这些功能并没有为所需的驱动器号返回任何内容,尽管有共享映射到指定的驱动器号。 我的猜测是问题在于priveledges。由于我的应用程序作为服务运行,它无法获取有关以用户模式映射的共享的信息(这对我来说似乎很奇怪)。
所以最后一个问题是 - 如何检测指定的驱动器号是否未被任何用户用于映射网络共享?

1 个答案:

答案 0 :(得分:0)

问题实际上是,用户可以持有的共享和管理员可以共享的共享可能存在差异。

注册表中有一个控制它的标志:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

EnableLinkedConnections = 1(DWord)

这也是解释这一点的MSDN-KB article。将EnableLinkedConnections设置为1可以解决此问题。通常将其设置为1.

背景:当UAC被发明时,这种变化是一个副作用。