Конференция "WinAPI" » Работа с Junction/Links [D7]
 
  • Лакримакристи (16.01.14 05:53) [0]
    Что-то не смог сходу найти, может кто направит как называется то что понадобится...

    > Ядро Windows поддерживает следующие виды ссылок:
    >  * Hard Links — жёсткие ссылки, как в *nix. Доступны начиная с Windows NT4.
    >  * Junction Points — аналог символических ссылок. Доступен начиная с Windows 2000 (NTFS 5).
    >  * Symbolic Links — символьные ссылки. Доступны начиная с Windows Vista.


    Как программно определить настоящая ли папка/файл, и если нет - то где находится настоящая/ий?
  • clickmaker © (16.01.14 09:24) [1]
  • Лакримакристи (16.01.14 10:42) [2]
    о.. Благодарю, пополз изучать. С:
  • tmp (28.02.14 08:24) [3]
    >> и если нет - то где находится настоящая/ий?

    А этой части я по ссылке не вижу...
  • brother © (28.02.14 08:34) [4]
    уж не системные ли папки win7 и выше сканим?
  • tmp (28.02.14 08:52) [5]
    ам... А есть разница? В перспективе может и их понадобится. Лично я пробую сейчас на таком:

    REM symlinks_test.bat
    MKLINK "C:\dev\symlinks\file1.txt" "E:\res\testing\file1.txt"
    MKLINK "C:\dev\symlinks\folder1" "E:\res\testing\folder1"
    MKLINK /D "C:\dev\symlinks\file2.txt" "E:\res\testing\file2.txt"
    MKLINK /D "C:\dev\symlinks\folder2" "E:\res\testing\folder2"
    MKLINK /H "C:\dev\symlinks\file3.txt" "E:\res\testing\file3.txt"
    MKLINK /H "C:\dev\symlinks\folder3" "E:\res\testing\folder3"
    MKLINK /J "C:\dev\symlinks\file4.txt" "E:\res\testing\file4.txt"
    MKLINK /J "C:\dev\symlinks\folder4" "E:\res\testing\folder4"

  • tmp (28.02.14 09:21) [6]
    Пардон, некоторые нельзя на другой диск:


    >  > MKLINK "C:\dev\symlinks\file1.txt" "E:\res\testing\file1.
    > txt"
    > символическая ссылка создана для C:\dev\symlinks\file1.txt
    > <<===>> E:\res\testing\file1.txt
    >  > MKLINK "C:\dev\symlinks\folder1" "E:\res\testing\folder1"
    > символическая ссылка создана для C:\dev\symlinks\folder1
    > <<===>> E:\res\testing\folder1
    >  > MKLINK /D "C:\dev\symlinks\file2.txt" "E:\res\testing\file2.
    > txt"
    > символическая ссылка создана для C:\dev\symlinks\file2.txt
    > <<===>> E:\res\testing\file2.txt
    >  > MKLINK /D "C:\dev\symlinks\folder2" "E:\res\testing\folder2"
    > символическая ссылка создана для C:\dev\symlinks\folder2
    > <<===>> E:\res\testing\folder2
    >  > MKLINK /H "C:\dev\symlinks\file3.txt" "E:\res\testing\file3.
    > txt"
    > Системе не удается переместить файл на другой диск.
    >  > MKLINK /H "C:\dev\symlinks\folder3" "E:\res\testing\folder3"
    > Системе не удается переместить файл на другой диск.
    >  > MKLINK /J "C:\dev\symlinks\file4.txt" "E:\res\testing\file4.
    > txt"
    > соединение создано для C:\dev\symlinks\file4.txt <<===>>
    > E:\res\testing\file4.txt
    >  > MKLINK /J "C:\dev\symlinks\folder4" "E:\res\testing\folder4"
    > соединение создано для C:\dev\symlinks\folder4 <<===>> E:
    > \res\testing\folder4


    Причём file2.txt и file4.txt считаются папками и не открываются - "Неверно задано имя папки", а folder1 считается файлом к которому - "Отказано в доступе".
    Переместил то что с цифрами "3" на диск C - всё равно не всё совсем:


    >  > MKLINK /H "C:\dev\symlinks\file3.txt" "C:\res\testing\file3.
    > txt"
    > Создана жесткая связь C:\dev\symlinks\file3.txt <<===>>
    > C:\res\testing\file3.txt
    >  > MKLINK /H "C:\dev\symlinks\folder3" "C:\res\testing\folder3"
    > Отказано в доступе.


    DIR способен сказать и какого они типа и куда они смотрят. Как узнать это же на WinAPI программно?
  • av (06.08.14 17:33) [7]

    > >> и если нет - то где находится настоящая/ий?
    >
    > А этой части я по ссылке не вижу...
    >


    Для симлинков - октрыть и сделать GetFinalPathNameByHandle.

    Для хардлинков нельзя, т.к. в случае хардлинка оба имени настоящие.
  • Alex Konshin © (21.08.14 01:54) [8]
    Junction только для директориев. Hardlink только для файлов одной партишн.
    Symlink вроде и для тех, и для других, но всё равно в пределах одной машины.
    Для junction и hardlink я когда-то очень давно написал утилитку XLink, которая работает на XP и позднее. Исходники должны быть на моём древнем сайте, гугл его знает.
  • DQ (27.08.14 15:50) [9]
    У вас там ссылка сломана, но скачать удалось (надо ток имя файла стереть из URL), спасибо!

    Но теперь мне тоже интересно как это DIR делает, через какой-такой DeviceIoControl?
  • ParanoiS © (13.10.14 21:53) [10]
    По моему GetFinalPathNameByHandle
 
Конференция "WinAPI" » Работа с Junction/Links [D7]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]