как найти все Hardlinks NTFS для заданного файла
От: Аноним  
Дата: 13.08.10 11:58
Оценка:
Добрый день!
Столкнулся тут с одной задачей и не пойму разрешима она или нет.
В общем допустим у нас есть эталонный файл, мы создаем к нему множество жестких ссылок.
Потом хотим при открытии одной из ссылок(или самого файла) получить множество всех жестких ссылок
на первоначальный файл.
Поискав в интернете, нашел только как получить кол-во ссылок, а как получить все записи для связанных(указывающих на один объект)
жестких ссылок так и не понял... Это вообще возможно? Задача нужна для fs фильтра.
Re: как найти все Hardlinks NTFS для заданного файла
От: ononim  
Дата: 13.08.10 12:16
Оценка: +1
А>Столкнулся тут с одной задачей и не пойму разрешима она или нет.
А>В общем допустим у нас есть эталонный файл, мы создаем к нему множество жестких ссылок.
А>Потом хотим при открытии одной из ссылок(или самого файла)
У жесткой ссылки и "самого файла" нету физических и логических различий. Собственно изначальное имя файла это тоже "жесткая ссылка", просто она самая первая

А>получить множество всех жестких ссылок на первоначальный файл.

А>Поискав в интернете, нашел только как получить кол-во ссылок, а как получить все записи для связанных(указывающих на один объект)
А>жестких ссылок так и не понял... Это вообще возможно? Задача нужна для fs фильтра.
В висте есть API FindFirstFileNameW, имеет смысл его поковырять — возможно соотвествующий ядреный функционал (FSCTL какие нибудь) появились еще раньше.
Как много веселых ребят, и все делают велосипед...
Re[2]: как найти все Hardlinks NTFS для заданного файла
От: x64 Россия  
Дата: 13.08.10 14:33
Оценка:
O>У жесткой ссылки и "самого файла" нету физических и логических различий.

Различия есть, я уже писал об этом здесь.

O>В висте есть API FindFirstFileNameW, имеет смысл его поковырять...


Там внутри NtQueryInformationFile() с классом FileHardLinkInformation (46), это поддерживается в ntfs.sys начиная с Windows Vista.
Re[3]: как найти все Hardlinks NTFS для заданного файла
От: ononim  
Дата: 13.08.10 15:54
Оценка:
O>>У жесткой ссылки и "самого файла" нету физических и логических различий.
x64>Различия есть, я уже писал об этом здесь.
Хм. Прикольно — проверил — в самом деле хардлинк с длинным именем не имеет досовского короткого имени в листинге директории родителя. Так что это смотрится скорее как баг, нежели фича. И полагаться на это совершенно плохая идея, особенно если учесть что в остальном линки абсолютно симметричны — вплоть до того что можно удалить "первичное" имя — в таком случае файл останется доступен по линкам и будет занимать на диске место пока их всех не удалишь.

O>>В висте есть API FindFirstFileNameW, имеет смысл его поковырять...

x64>Там внутри NtQueryInformationFile() с классом FileHardLinkInformation (46), это поддерживается в ntfs.sys начиная с Windows Vista.
значит не повезло
Как много веселых ребят, и все делают велосипед...
Re[3]: как найти все Hardlinks NTFS для заданного файла
От: MShura  
Дата: 13.08.10 22:41
Оценка:
x64>Различия есть, я уже писал об этом здесь.

По поводу NameFlags:
— Типы 1/2 обязаны быть парными
— У файла только одно парное имя
— Тип 0 это обычное имя

Если выставить HKLM\SYSTEM\CurrentControlSet\Control\NtfsDisable8dot3NameCreation и перегрузится, то все имена у новых файлов будут с типом 0.
И нет никакого способа найти среди них "первое" имя

У меня есть код (программа), который удаляет все короткие имена с тома.
Делаю так для всех NTFS томов на компьютере включая том с windows.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.