Определить букву диска, которая не используется для отображения общего сетевого ресурса

Я пишу приложение на C ++, работающее под управлением Windows Service (Win XP, Vista, 7, 8, серверы).
В моем приложении используется библиотека третьего патри, которая отображает локальную папку на диск, и этот диск должен быть доступен в пользовательском режиме (для всех пользователей). Проблема возникает, когда пользователь имеет сетевой ресурс, сопоставленный с локальным диском, и сторонняя библиотека не распознает указанную букву диска как уже используемую.
Вопрос в том, как определить (из приложения-службы), доступна ли требуемая буква диска?
я использую

GetLogicalDrives
QueryDosDevice

определить логические устройства. я пробовал

WNetGetConnection
WNetGetUniversalName

чтобы получить информацию о сетевом ресурсе, но эти функции не возвращают ничего для требуемой буквы диска, несмотря на то, что были общие ресурсы, сопоставленные с указанными буквами диска.
Я думаю, что проблема в привилегиях. Поскольку мое приложение запускается как служба, оно не может получить информацию об общих ресурсах, отображаемых в пользовательском режиме (что мне кажется очень странным).
Итак, последний вопрос — как определить, не используется ли указанная буква диска для сопоставления общего сетевого ресурса каким-либо пользователем?

0

Решение

Проблема в том, что может быть разница с общими ресурсами, которые пользователь может хранить, и общими ресурсами, которые может иметь администратор.

В реестре есть флаг, который контролирует это:

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

EnableLinkedConnections = 1 (DWord)

Здесь также Статья MSDN-KB это объясняет это. С помощью EnableLinkedConnections значение 1 должно исправить это. Обычно он установлен в 1.

Фон: Когда был изобретен UAC, это изменение было одним из побочных эффектов.

0

Другие решения


По вопросам рекламы [email protected]