Узнайте, являются ли две РУЧКИ жесткими ссылками на один и тот же файл - PullRequest
1 голос
/ 09 января 2011

(Этот вопрос сложный ... может потребоваться знание NTFS и / или использование собственных API NT; будьте осторожны.):)

Если мне дается два HANDLE с на два файла, как я могу окончательно (не только с большой вероятностью) выяснить, принадлежат ли два HANDLE к одному и тому же файлу, и поток на диске?

Это означает, например, что проверки 8-байтовых идентификаторов файлов NTFS недостаточно, поскольку два HANDLE с одним и тем же идентификатором файла могут указывать на разные потоки данных одного и того же файла, и мне нужно найти если два потока действительно одинаковы и отличаются только по имени (жесткая ссылка).

(Какой смысл? Таким образом, если я хочу выполнить операцию со всеми файлами в папке, я не выполняю операцию дважды для одного и того же потока данных с разными именами.)

1 Ответ

1 голос
/ 09 января 2011

Для этого требуется GetFileInformationByHandleEx () с запросом FileStreamInfo.Это возвращает имя потока.

Следует отметить это предупреждение в документации SDK:

Некоторые классы информации о файлах ведут себя немного по-разному в разных выпусках операционной системы.Эти классы поддерживаются базовыми драйверами, и любая возвращаемая ими информация может меняться между выпусками операционной системы.

Не полагайтесь на восстановление информации, которая (или должна быть) легко доступна в вашей программе.

...