Получите маркировку диска в C#

Когда я использую System.IO.DriveInfo.GetDrives() и посмотрите на .VolumeLabel свойство одного из дисков, я вижу "PATRIOT XT", который является действительно меткой тома диска.

Если я открываю "My Computer", вместо этого я вижу "Диск Путешественника TrueCrypt", и я, может казаться, не нахожу способа программно получить то значение как ни один из DriveInfo свойства содержат то значение. Я также пытался запросить информацию через WMI Win32_LogicalDisk, но никакие свойства не содержали то значение там также.

Таким образом, какую-либо идею, что использует маркировать My Computer, называют, и что еще более важно, как программно получить его?

Править: Чтобы быть ясным, вот, код, который я использую, сопровождаемый тем, что он производит, сопровождаемый тем, что я вижу в Своем Компьютере (который является тем, что я хочу копировать):

foreach (DriveInfo DI in DriveInfo.GetDrives())
    richTextBox1.AppendText(
        (
            DI.IsReady ?
            (DI.VolumeLabel.Length == 0 ? DI.DriveType.ToString() : DI.VolumeLabel) :
            DI.DriveType.ToString()
        )
        +
        " (" + DI.Name.Replace("\\", "") + ")"
        + Environment.NewLine
    );
Removable (A:)
Fixed (C:)
CDRom (D:)
PATRIOT XT (E:)
Backup (Y:)
Data (Z:)

Мой Компьютер детализирует дисплеи представления:

Floppy Disk Drive (A:)
Local Disk (C:)
DVD RW Drive (D:)
TrueCrypt Traveler Disk (E:)
Backup (Y:)
Data (Z:)
13
задан GSerg 19 April 2017 в 13:49
поделиться

5 ответов

Похоже, Мой компьютер просматривает autorun.inf и использует значение label = из раздела [autorun].

До сих пор не совсем уверен, откуда берутся ярлыки «DVD RW Drive» и «Floppy Disk Drive», но я предполагаю, что они могут быть жестко закодированы в зависимости от типа привода.

1
ответ дан 2 December 2019 в 01:31
поделиться

Это похоже, что это могло быть решением.

0
ответ дан 2 December 2019 в 01:31
поделиться

Надеюсь, вам поможет следующее:

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern bool GetVolumeInformation(string Volume,
        StringBuilder VolumeName, uint VolumeNameSize,
        out uint SerialNumber, out uint SerialNumberLength, out uint flags,
        StringBuilder fs, uint fs_size);

    private void Form1_Load(object sender, EventArgs e)
    {
        uint serialNum, serialNumLength, flags;
        StringBuilder volumename = new StringBuilder(256);
        StringBuilder fstype = new StringBuilder(256);
        bool ok = false;
        Cursor.Current = Cursors.WaitCursor;
        foreach (string drives in Environment.GetLogicalDrives())
        {
            ok = GetVolumeInformation(drives, volumename, (uint)volumename.Capacity - 1, out serialNum,
                                   out serialNumLength, out flags, fstype, (uint)fstype.Capacity - 1);
            if (ok)
            {
                lblVolume.Text = lblVolume.Text + "\n Volume Information of " + drives + "\n";
                lblVolume.Text = lblVolume.Text + "\nSerialNumber of is..... " + serialNum.ToString() + " \n";
                if (volumename != null)
                {
                    lblVolume.Text = lblVolume.Text + "VolumeName is..... " + volumename.ToString() + " \n";
                }
                if (fstype != null)
                {
                    lblVolume.Text = lblVolume.Text + "FileType is..... " + fstype.ToString() + " \n";
                }
            }
            ok = false;
        }
        Cursor.Current = Cursors.Default;
    }
1
ответ дан 2 December 2019 в 01:31
поделиться

Я сам не пробовал это , но в реестре найдите

HKLM/Software/Microsoft/Windows/CurrentVersion/Explorer/DriveIcons/[Drive-Letter]/

, затем прочтите ключ

DefaultLabel

. Также ВНИМАНИЕ! запись неверных ключей / значений в реестр может серьезно повредить вашу систему! Прежде чем продолжить, убедитесь, что вы уверены в том, что делаете. Это ресурс, который поможет вам получить программный доступ к реестру.

0
ответ дан 2 December 2019 в 01:31
поделиться

Он находится в папке autorun.inf. Моя метка тома для моей флешки просто 16 ГБ, но поместив файл autorun.inf со следующим текстом [автозапуск] label = Мой 16-гигабайтный флеш-накопитель

, а затем используя attrib для + s + h + r файла, он не отображается, если у меня нет показать скрытые файлы И показать системные файлы в параметрах папки / просмотр включен.

Чтобы найти это программно через C #, я, честно говоря, не пытался открыть autorun.inf, но это должно быть прямо, проверьте, игнорирует ли File.Exists (Drive: \ autorun.inf) тот факт, что это + s + h + r (на всякий случай, если кто-то его установил), то откройте его только для чтения и проанализируйте строку label =. Если на самом деле файл присутствует, используйте метку автозапуска вместо Этикетка тома.

Я все еще могу изменить использование тега autorun.inf label = даже в Windows 7 для изменения метки.

0
ответ дан 2 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: