wmic является очень полным инструментом
wmic diskdrive list
, предоставляют (слишком много) подробный список, например
для меньшего количества информации
wmic diskdrive list brief
упоминания в комментариях :
В C:
system("wmic diskdrive list");
, Как прокомментировано, можно ли также назвать WinAPI, но... как показано в" , Как получить данные из WMI с помощью Приложения C? ", это довольно сложно (и обычно делавшийся с C++, не C).
Или с PowerShell:
Get-WmiObject Win32_DiskDrive
Я просто натыкался на это в своем 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;
Я изменил программу с открытым исходным кодом, названную "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
GetLogicalDrives () перечисляет все смонтированные разделы диска, не физические диски.
можно перечислить буквы дисков с (или без) GetLogicalDrives, затем назвать QueryDosDevice () для обнаружения, на каком физическом диске буква отображается.
, С другой стороны, можно декодировать информацию в реестре в HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices. Кодировка двоичных данных там не очевидна, как бы то ни было. Если у Вас есть копия Russinovich и книга Solomon Внутренности Microsoft Windows, эта структура данных реестра обсуждена в Главе 10.