У меня есть COM-компонент для управления задачами, связанными с диском. Получая некоторые критерии информации о диске, у меня есть один или несколько исходных дисков и один целевой диск. Когда я получаю имя исходного диска, COM дает мне что-то вроде {e42c3d59-e32c-11e1-9aa5-806e6f6e6963}
, Как я могу преобразовать это в имя тома?
Это действительно зависит от того, что вы подразумеваете под «именем тома». Если вы имеете в виду фактическое имя тома, вы можете создать его на основе строкового представления GUID, возвращаемого COM-объектом. Название тома имеет вид \\?\Volume{GUID}
где GUID
это идентификатор тома.
Если вы имеете в виду объем этикетка вы можете получить его по телефону GetVolumeInformation()
используя имя тома, описанное выше.
// Just so we have something a bit clearer than calling a member function
// of the COM object.
const std::wstring& volumeGuid = L"{e42c3d59-e32c-11e1-9aa5-806e6f6e6963}";
// We have the GUID now get the volume label
std::wstring volumeName = L"\\\\?\\Volume" + volumeGuid + L"\\";
std::wstring::value_type volumeLabelBuffer[MAX_PATH];
BOOL result = ::GetVolumeInformation(
volumeName.c_str(),
volumeLabelBuffer,
sizeof(volumeLabelBuffer) / sizeof(volumeLabelBuffer[0]),
nullptr,
nullptr,
nullptr,
nullptr,
0);
Других решений пока нет …