Dlaczego NTFS nie zezwala na używanie końcowych okresów w nazwach katalogów? [Zamknięte]

4

W systemie Linux mogę mieć folder o nazwie temp..

Jeśli spróbuję zrobić mkdir temp. na komputerze z systemem Windows okres końcowy jest obcinany.

Jeśli spróbuję zsynchronizować katalog z Linuksa do Windows, który ma okres końcowy, zakończy się niepowodzeniem (znaleziony w seafile przez kolegę).

Dlaczego?

warren
źródło
1
Czy więc pytasz, dlaczego NTFS na to nie pozwala, dlaczego Seafile nie obsługuje go z wdziękiem lub jak zsynchronizować plik z Linuksa na Windows, który ma okres na końcu? Potrzebujemy wyjaśnień, takich jak „dlaczego tak jest?” są ogólnie uważane za „nie konstruktywne” i zostaną zamknięte. Rozważ edytowanie pytania, aby uzyskać więcej informacji na temat konkretnego problemu, który próbujesz rozwiązać.
Ƭᴇcʜιᴇ007
1
Chociaż prawdopodobnie nie rozwiąże to twojego problemu, jeśli poprowadzisz ścieżkę z nazwą, powinieneś móc nazwać folder według własnego uznania. Powinieneś być w stanie uruchomić coś w stylu "mkdir? C: temp." w cmd i spraw, by stał się folderem o nazwie „temp.” w C: ale nie będziesz mógł uzyskać do niego dostępu, ponieważ „?” nie jest lokalizacją sieciową. To powiedziałeś ty moc być w stanie wypróbować to z prawdziwym miejscem sieciowym i sprawić, by działało, ale nie jestem w stanie przetestować tego w moim obecnym środowisku.
Mono
2
NTFS nie zabrania tego, tylko API Win32. Jak zauważył Alex, jeśli używasz \\?\... aby pominąć zwykłe parsowanie i podać surową ścieżkę do NT API, to ty mogą utwórz katalog z końcowym okresem.
grawity
1
@Alex: Przy okazji, okres jest usuwany lokalnie - serwer SMB systemu Windows mówi bezpośrednio do NT API i umożliwia tworzenie dowolnej nazwy.
grawity
1
Jak piekło czy to pytanie nie jest konstruktywne ?! Dzisiaj dowiedziałem się, że Windows zezwala na wykorzystanie exploitów bajtowych NULL w nazwach katalogów w taki sposób, że narzędzia Windows, które wykorzystują API Windows, nie są w stanie obsłużyć.
hopeseekr

Odpowiedzi:

8

NTFS nie zabrania tego, to tylko API Win32. Jak zauważył Alex w komentarzu, jeśli używasz \\?\... Aby pominąć zwykłe parsowanie i podać surową ścieżkę do NT API, możesz utworzyć katalog z końcowym okresem.

(Dlaczego to działa? Artykuł Przestrzenie nazw plików Win32 mówi: „W przypadku plików I / O przedrostek„ obsługuje duże ścieżki i nazwy plików, możesz przekroczyć limity MAX_PATH, które są w inny sposób wymuszane przez interfejsy API systemu Windows. ”)

Co się tyczy czemu okres końcowy jest usuwany, nie ma oficjalnej dokumentacji, ale moc muszę coś zrobić z kompatybilnością ze starymi programami MS-DOS lub Windows 3.11. W świecie nazw plików 8.3 puste rozszerzenie i żadne rozszerzenie wcale nie było takie samo - w obu przypadkach nazwa pliku XYZ byłby przechowywany jako XYZ····· i rozszerzenie jako ··· (kropki reprezentujące bajty zerowe), więc mogły istnieć programy, które polegały na tym fakcie. Gdy system Windows 95 uzyskał obsługę długich nazw plików, zaczął przechowywać zarówno nazwę, jak i rozszerzenie jako pojedynczy ciąg, powodując xyz i xyz. stać się różnymi nazwami plików. Prawdopodobnie musiał rozebrać okres końcowy, aby uniknąć złamania takich programów.

grawity
źródło