Подтвердить что ты не робот

Как программно изменить метку сопоставленного диска?

Я пишу часть программного обеспечения, которое отображает сетевой диск с помощью API WNetAddConnection2. На всякий случай это актуально, это привод WebDAV, а не обычный SMB-ресурс.

Привод принимает имя по умолчанию, которое я хотел бы изменить.

Некоторые ответы в сети рекомендуют использовать System.IO.DriveType, например:

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (var drive in allDrives)
{
    if (drive.DriveType == DriveType.Network && drive.Name.StartsWith("Z:"))
    {
        drive.VolumeLabel = "DriveInfo";
    }
}

Это не работает на сетевых дисках, и это подкреплено MSDN, где указано, что будет выброшено исключение UnauthorizedAccessException.

Во-вторых, я попытался использовать метод оболочки:

Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2) shell.NameSpace("Z:")).Self.Name = "Shell";

Код выполняется без ошибок, но диск не переименовывается. И вот где это странно, я нашел путь реестра, где эти вещи записываются:

HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ MountPoints2

В приведенном выше коде создается ключ, который выглядит корректно, и добавляет _LabelFromReg REG_SZ с "Shell" в качестве значения. Однако это НЕ отражается в проводнике или где-либо еще.

Затем я вручную переименовал отображаемый диск, щелкнув правой кнопкой мыши и выбрав "Переименовать".

Это создает новый, немного другой ключ в MountPoints2, который отлично работает.

Итак, приведенный выше код оболочки не совсем правильно разрешает путь - есть ли что-то еще, что я могу попробовать? Вышеприведенное приводит меня к выводу, что Windows должна использовать другой API-вызов для переименования диска?


Обновление 1

Это определенно связано с тем, что они являются дисками WebDAV. Должна быть какая-то обработка под капотом.

Мои карты программного обеспечения https://[email protected]/stuff/destination/docs. Точный путь можно увидеть с помощью команды Net Use. Это путь, который добавляет код shell выше в реестр и пытается назвать его.

Однако, зависание над диском в Проводнике Windows дает мне https://[email protected]/anotherfolder/stuff/destination, и этот путь, который переименовывает вручную в Explorer, добавляет в реестр.

Все, что мне удалось выяснить до сих пор, - это вернуть второй путь из вызова WMI (Win32_LogicalDisk → ProviderName), но я действительно хочу избежать подхода к записи в ручном режиме.

4b9b3361