Как перечислить физические диски?

70
задан Ajay 15 December 2017 в 10:41
поделиться

4 ответа

WMIC

wmic является очень полным инструментом

wmic diskdrive list

, предоставляют (слишком много) подробный список, например

для меньшего количества информации

wmic diskdrive list brief 

Sebastian Godelet C

упоминания в комментариях :

В C:

system("wmic diskdrive list");

, Как прокомментировано, можно ли также назвать WinAPI, но... как показано в" , Как получить данные из WMI с помощью Приложения C? ", это довольно сложно (и обычно делавшийся с C++, не C).

PowerShell

Или с PowerShell:

Get-WmiObject Win32_DiskDrive
66
ответ дан 8 revs, 4 users 57% 24 November 2019 в 13:16
поделиться

Я просто натыкался на это в своем RSS-ридере сегодня. У меня есть более чистое решение для Вас. Этот пример находится в Дельфи, но может очень легко быть преобразован в C/C++ (Это - весь Win32).

Запрос все значение называет от следующего местоположения реестра: HKLM\SYSTEM\MountedDevices

Один за другим, передайте их в следующую функцию, и Вы будете возвращены имя устройства. Довольно чистый и простой! я нашел этот код блога здесь.

function VolumeNameToDeviceName(const VolName: String): String;
var
  s: String;
  TargetPath: Array[0..MAX_PATH] of WideChar;
  bSucceeded: Boolean;
begin
  Result := ”;
  // VolumeName has a format like this: \\?\Volume{c4ee0265-bada-11dd-9cd5-806e6f6e6963}\
  // We need to strip this to Volume{c4ee0265-bada-11dd-9cd5-806e6f6e6963}
  s :=  Copy(VolName, 5, Length(VolName) - 5);

  bSucceeded := QueryDosDeviceW(PWideChar(WideString(s)), TargetPath, MAX_PATH) <> 0;
  if bSucceeded then
  begin
    Result := TargetPath;
  end
  else begin
    // raise exception
  end;

end;
1
ответ дан Mick 24 November 2019 в 13:16
поделиться

Я изменил программу с открытым исходным кодом, названную "dskwipe" для вытаскивания этих данных о диске из него. Dskwipe записан в C, и можно вытащить эту функцию из него. Двоичный файл и источник доступны здесь: dskwipe 0.3 был выпущен

, возвращенная информация будет выглядеть примерно так:

Device Name                         Size Type      Partition Type
------------------------------ --------- --------- --------------------
\\.\PhysicalDrive0               40.0 GB Fixed
\\.\PhysicalDrive1               80.0 GB Fixed
\Device\Harddisk0\Partition0     40.0 GB Fixed
\Device\Harddisk0\Partition1     40.0 GB Fixed     NTFS
\Device\Harddisk1\Partition0     80.0 GB Fixed
\Device\Harddisk1\Partition1     80.0 GB Fixed     NTFS
\\.\C:                           80.0 GB Fixed     NTFS
\\.\D:                            2.1 GB Fixed     FAT32
\\.\E:                           40.0 GB Fixed     NTFS
12
ответ дан Mick 24 November 2019 в 13:16
поделиться

GetLogicalDrives () перечисляет все смонтированные разделы диска, не физические диски.

можно перечислить буквы дисков с (или без) GetLogicalDrives, затем назвать QueryDosDevice () для обнаружения, на каком физическом диске буква отображается.

, С другой стороны, можно декодировать информацию в реестре в HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices. Кодировка двоичных данных там не очевидна, как бы то ни было. Если у Вас есть копия Russinovich и книга Solomon Внутренности Microsoft Windows, эта структура данных реестра обсуждена в Главе 10.

8
ответ дан Die in Sente 24 November 2019 в 13:16
поделиться
Другие вопросы по тегам:

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