Twarde dowiązania w systemie operacyjnym Windows nie są obsługiwane na katalogach. Aby stworzyć twarde dowiązanie, należy użyć funkcji CreateHardLink
lub ln
.
Dodatkowo występują także dowiązanie miękkie, czyli tak zwane junctions. "Tłumaczą" one ścieżki w taki sposób, że jeżeli przykładowo katalog c:\temp jest dowiązaniem wskazującym na c:\windows\temp, to program czytający plik c:\temp\a.in naprawdę przeczyta plik c:\windows\temp\a.in. Jest to bardzo użyteczne nie tylko do lepszego układania danych, ale także do stworzenia prostych ścieżek do katalogów, które znajdują się głęboko w hierarchii.
Dowiązania miękkie bazują na mechanizmie reparse points (nie istnieje znane nam dobre polskie tłumaczenie tego terminu, więc pozostaniemy przy oryginale anglojęzycznym). Reparse point to plik lub katalog który posiada atrybut reparse data, w którym jest informacja o lokalizacji oryginalnego pliku. Dodatkowo każdy plik reparse posiada unikalny reparse tag, dzięki czemu jeżeli następuje po raz któryś odwołanie do tego samego pliku reparse, to system nie musi odczytywać informacji z reparse data.
Kiedy NTFS napotyka plik typu reparse to zwraca reparse status code, który informuje system plików, aby ten przegjrzał reparse data. Program odpowiedzialny za dostarczanie danych (czyli system plików lub wejścia/wyjścia) wybiera wówczas jedną z dwóch możliwości:
Podmienienie ścieżki w wywoływanej funkcji
Jest to metoda używana np. przez dowiązania miękkie.
Usunięcie informacji o reparse point i przesłanie pliku pod wskazywany adres.
Jest to używane np. przez HSM (Hierarchical store management), który nieużywane pliki przesuwa na "tańsze" nośniki zamieniając ich oryginalne pozycje na pliki reparse. Jeżeli jakaś aplikacja chce czytać z takiego pliku, to HSM ściąga plik i wstawia go z powrotem na swoje "stare" miejsce.