ドライブがハード リンクをサポートしているかどうかを判断するには、次の解決策を見つけました。
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 でハード リンクをサポートしているかどうかを判断する方法を知っている人はいますか?