А>Столкнулся тут с одной задачей и не пойму разрешима она или нет.
А>В общем допустим у нас есть эталонный файл, мы создаем к нему множество жестких ссылок.
А>Потом хотим при открытии одной из ссылок(или самого файла)
У жесткой ссылки и "самого файла" нету физических и логических различий. Собственно изначальное имя файла это тоже "жесткая ссылка", просто она самая первая
А>получить множество всех жестких ссылок на первоначальный файл.
А>Поискав в интернете, нашел только как получить кол-во ссылок, а как получить все записи для связанных(указывающих на один объект)
А>жестких ссылок так и не понял... Это вообще возможно? Задача нужна для fs фильтра.
В висте есть API FindFirstFileNameW, имеет смысл его поковырять — возможно соотвествующий ядреный функционал (FSCTL какие нибудь) появились еще раньше.
O>У жесткой ссылки и "самого файла" нету физических и логических различий.
Различия есть, я уже писал об этом
здесь.
O>В висте есть API FindFirstFileNameW, имеет смысл его поковырять...
Там внутри NtQueryInformationFile() с классом FileHardLinkInformation (46), это поддерживается в ntfs.sys начиная с Windows Vista.
O>>У жесткой ссылки и "самого файла" нету физических и логических различий.
x64>Различия есть, я уже писал об этом здесь.
Хм. Прикольно — проверил — в самом деле хардлинк с длинным именем не имеет досовского короткого имени в листинге директории родителя. Так что это смотрится скорее как баг, нежели фича. И полагаться на это совершенно плохая идея, особенно если учесть что в остальном линки абсолютно симметричны — вплоть до того что можно удалить "первичное" имя — в таком случае файл останется доступен по линкам и будет занимать на диске место пока их всех не удалишь.
O>>В висте есть API FindFirstFileNameW, имеет смысл его поковырять...
x64>Там внутри NtQueryInformationFile() с классом FileHardLinkInformation (46), это поддерживается в ntfs.sys начиная с Windows Vista.
значит не повезло
x64>Различия есть, я уже писал об этом здесь.
По поводу NameFlags:
— Типы 1/2 обязаны быть парными
— У файла только одно парное имя
— Тип 0 это обычное имя
Если выставить HKLM\SYSTEM\CurrentControlSet\Control\NtfsDisable8dot3NameCreation и перегрузится, то все имена у новых файлов будут с типом 0.
И нет никакого способа найти среди них "первое" имя
У меня есть код (программа), который удаляет все короткие имена с тома.
Делаю так для всех NTFS томов на компьютере включая том с windows.