如何从GUID获取卷名?

时间:2013-06-14 04:58:11

标签: c++ visual-c++ win32ole

我有一个用于管理磁盘相关任务的COM组件。在获取某些磁盘信息标准时,我有一个或多个源驱动器和一个目标驱动器。当我检索源驱动器名称时,COM给了我类似{e42c3d59-e32c-11e1-9aa5-806e6f6e6963}的内容。如何将其取消引用为卷名?

1 个答案:

答案 0 :(得分:2)

这实际上取决于“卷名”的含义。如果您指的是卷的实际名称,则可以根据COM对象返回的GUID的字符串表示形式创建它。卷名称的格式为\\?\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);