Канонический full path name

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 7 янв 2008.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Как известно один и тот-же файл можно адресовать несколькими способами, например:
    c:\program file\test.txt
    c:\progra~1\test.txt [format 8.3]
    \drive1\program files\test.txt
    Hard/soft links
    Можно также комбинировать эти методы.

    Есть ли способ (очень желательно в kernel mode) "канонизировать" путь к файлу, т.е. представить его в однозначном формате не допускающем неоднозначности. Другими словами, чтоб пути к файлу были идеентичны тогда и только тогда когда они указываут на один и тот-же файл.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Можно представить его в полном виде \Device\HarddiskPartition9\Windows\explorer.exe
    Но это не исключает жестких ссылок..
     
  3. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Great
    Как, если не секрет?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Раскрыть все символьные ссылки последовательно. Через NtQuerySymbolicLinkObject.
    Я уже писал даже алгоритм примерный.. в поиске есть.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ага...
     
  6. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    O_o, а что, в венде уже хардлинки и симлинки появились??? А они обычному смертному доступны?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    В NTFS есть хардлинки.
    Симлинки - в менеджере объектов
     
  8. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    А юзверь обычный может их создавать?
     
  9. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Alt+F6 в Far'е - и хардлинки, и симлинки создать может.
     
  10. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Можно и из консоли: fsutil hardlink create /?
     
  11. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    А есть возможость по линку определить к какому физическому файлу он относится?
     
  12. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Для жёстких ссылок это невозможно по определению - два имени ссылаются на один и тот же файл, но имена абсолютно независимы друг от друга, при удалении одного имени второе остаётся валидным именем файла. Можно только узнать количество жёстких ссылок на данный файл (LCtrl+9 в Far'е, программно GetFileInformationByHandle либо ZwQueryInformationFile с классом FileStandardInformation).
    Для символических ссылок - Ctrl+A в Far'е.
    Кстати, с помощью тех же GetFileInformationByHandle/ZwQueryInformationFile можно проверить, указывают ли два открытых хэндла на один и тот же файл. Подробности - в документации.
     
  13. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Нет, я имею в виду стандартный гуёвый win shell, а не всякие примочки сторонних разработчиков.
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
     
  15. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Я имею в виду стандартный гуёвый win shell, а не консоль.
    З.Ы. fsutill hardlink create / - изврат имхо.