Как определить, поддерживает ли диск жесткие ссылки в Windows XP?

Я нашел следующее решение, чтобы определить, поддерживает ли диск жесткие ссылки:

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 флаг FILE_SUPPORTS_HARD_LINKS не поддерживается до Windows Server 2008 R2 и Windows 7.

Я тоже думал об использовании CreateHardLink() для того, чтобы попытаться создать фиктивную жесткую ссылку. Если жесткая ссылка создана, то я знаю, что создание жестких ссылок на соответствующем диске возможно. Однако может случиться так, что у меня нет прав доступа к указанному диску. В этом случае я предполагаю, что этот метод потерпит неудачу.

Кто-нибудь знает, как определить, поддерживает ли диск жесткие ссылки в Windows XP, не требуя записи на этот диск?

1

Решение

Спасибо всем комментаторам. Я собрал ваши предложения и в итоге нашел следующее решение. Это решение должно работать и для 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() предоставляет всю необходимую информацию.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]