Как известно один и тот-же файл можно адресовать несколькими способами, например: c:\program file\test.txt c:\progra~1\test.txt [format 8.3] \drive1\program files\test.txt Hard/soft links Можно также комбинировать эти методы. Есть ли способ (очень желательно в kernel mode) "канонизировать" путь к файлу, т.е. представить его в однозначном формате не допускающем неоднозначности. Другими словами, чтоб пути к файлу были идеентичны тогда и только тогда когда они указываут на один и тот-же файл.
Можно представить его в полном виде \Device\HarddiskPartition9\Windows\explorer.exe Но это не исключает жестких ссылок..
Раскрыть все символьные ссылки последовательно. Через NtQuerySymbolicLinkObject. Я уже писал даже алгоритм примерный.. в поиске есть.
Для жёстких ссылок это невозможно по определению - два имени ссылаются на один и тот же файл, но имена абсолютно независимы друг от друга, при удалении одного имени второе остаётся валидным именем файла. Можно только узнать количество жёстких ссылок на данный файл (LCtrl+9 в Far'е, программно GetFileInformationByHandle либо ZwQueryInformationFile с классом FileStandardInformation). Для символических ссылок - Ctrl+A в Far'е. Кстати, с помощью тех же GetFileInformationByHandle/ZwQueryInformationFile можно проверить, указывают ли два открытых хэндла на один и тот же файл. Подробности - в документации.
Я имею в виду стандартный гуёвый win shell, а не консоль. З.Ы. fsutill hardlink create / - изврат имхо.