如何确定驱动器是否支持Windows XP中的硬链接?

时间:2014-04-05 08:51:33

标签: c++ windows mfc hardlink

我找到了以下解决方案来确定驱动器是否支持硬链接:

CString strDrive = _T("C:\\");
DWORD dwSysFlags;
if(GetVolumeInformation(strDrive, NULL, 0, NULL, NULL, &dwSysFlags, NULL, 0))
{
    if((dwSysFlags & FILE_SUPPORTS_HARD_LINKS) != 0)
    {
        // Hard links can be created on the specified drive.
    }
    else
    {
        // Hard links cannot be created on the specified drive.
    }
}

但是,根据MSDN,在Windows Server 2008 R2和Windows 7之前不支持标记FILE_SUPPORTS_HARD_LINKS

我还考虑过使用CreateHardLink()来尝试创建虚拟硬链接。如果创建了硬链接,那么我知道可以在相应的驱动器上创建硬链接。但是,我可能无法访问所述驱动器。在这种情况下,我认为这种方法会失败。

是否有人知道如何确定驱动器是否支持Windows XP中的硬链接而无需对该驱动器进行写访问?

1 个答案:

答案 0 :(得分:3)

感谢所有评论员。我把你的建议放在一起,最后得到了以下解决方案。此解决方案也适用于Vista:

CString strDrive = _T("C:\\");
DWORD dwSysFlags;

TCHAR szFileSysName[1024];
ZeroMemory(szFileSysName, 1024);

if(GetVolumeInformation(strDrive, NULL, 0, NULL, NULL, &dwSysFlags, szFileSysName, 1024))
{
    // The following check can be realized using GetVersionEx().
    if(bIsWin7OrHigher())
    {
        if((dwSysFlags & FILE_SUPPORTS_HARD_LINKS) != 0)
        {
            // Hard links can be created on the specified drive.
        }
        else
        {
            // Hard links cannot be created on the specified drive.
        }
    }
    else
    {
        if(_tcsicmp(szFileSysName, _T("NTFS")) == 0)
        {
            // Hard links can be created on the specified drive.
        }
        else
        {
            // Hard links cannot be created on the specified drive (maybe).
        }
    }
}

这个解决方案的好处在于 GetVolumeInformation()提供所有必需的信息。