Lange filenamen onder Windows-95 en NT

Windows-95 gebruikt dezelfde FAT als MS-DOS (FAT-16 i.t.t. FAT-32 dat door Windows-98 ondersteund wordt; overigens werkt Windows 98 ook met FAT-16). De directory struktuur is echter geschikt gemaakt voor lange filenamen. Om backward compatibiliteit te handhaven volgt Windows-95 in principe het oude MS-DOS formaat met de 8.3 filenamen (acht tekens voor de filenaam en drie voor de extensie), maar voor lange filenamen worden extra directory entries gebruikt.

Elke lange filenaam heeft onder Windows-95 een met MS-DOS compatibele 8.3 versie die altijd in hoofdletters is (ook al gebruikt Windows-95 kleine letters). Deze 8.3 compatibele naam noemen we de 8.3 alias. Voor deze alias worden van de lange Windows-95 naam alleen de eerste 6 letters gebruikt aangevuld met ~ (tilde) gevolgd door een cijfer (1, 2 enzovoort). Deze cijfers worden gebruikt om filenamen die de eerste zes letters gelijk hebben toch als afzonderlijke namen onder DOS te herkennen. Als er meer dan negen van dit soort files zijn, worden alleen de eerste vijf tekens in 8.3 representatie gebruikt gevolgd door een tilde een twee cijfers. De directory entry die onmiddelijk vooraf gaat aan deze 8.3 compliant naam wordt gebruikt om de lange filenaam in op te slaan. Hierbij past men 16 bits unicode karakters toe (i.p.v. ASCII). De attribute byte van deze directory entry wordt op de 'onmogelijke combinatie' 0x0F gezet. Het gevolg hiervan is dat oude applicaties deze directory entries niet als geldige entries herkennen en ze verder negeren. Applicaties die speciaal zijn gemaakt om filesystemen te controleren en te repareren en nog niet aangepast zijn aan deze truc zullen deze entries wel zien en eventueel een poging wagen het filesysteem te 'repareren'. Deze applicaties (zoals disk doctor) zijn niet bruikbaar en gebruikers moeten upgraden naar een versie die wel lange filenamen ondersteunt.

Natuurlijk moeten voor de wat langere filenamen meer van deze directory entries gebruikt worden. Dit heeft wel gevolgen voor de root-directory (de eerste directory in de boomstructuur, zeg maat de stam). Bij FAT is de root directory beperkt tot 512 entries. Lange filenamen gebruiken per file (of subdirectory) meer entries tegelijk. Het gevolg kan zijn dat er in de root directory geen nieuwe files of subdirectories kunnen worden aangemaakt als er veel lange filenamen gebruikt worden.

Het eerste byte van de lange-filenaam entries heeft een speciale functie. Vijf bits worden gebruikt als tellertje waarmee aangegeven wordt welk stuk van de lange naam in de desbetreffende entry staat (eerste stuk, tweede stuk enzovoort) Bij de laatste entry wordt een extra bit (0x40) van deze flag-byte geset om aan te geven dat het om het laatste stuk van de filenaam gaat. De attribute byte van de voor de lange filenaam gebruikte directory entry wordt niet voor de naam gebruikt maar staat op de steeds op de waarde 0x0F.

Windows NT 4 volgt een vergelijkbare strategie voor lange filenamen op een FAT partitie. Het grote verschil met windows 95 is dat het maken van de 8.3 alias het probleem van overeenkomende namen iets anders wordt opgelost. Stel we hebben zeven filenamen die elk de eerste zes karakters hetzelfde hebben, dan wordt alleen voor de eerste vier files de methode van windows 95 gevolgd. Daarna worden alleen de eerste twee karakters gebruikt gevolgd door een vier random karakters en een tilde met een cijfer. Dus filenaamA filenaamB filenaamC, filenaamD, filenaamE, filenaamF en filenaamG wordt FILENA~1, FILENA~2, FILENA~3, FILENA~4, FI0F58~1, FI6968~1 en FIA7F5~1. Deze alias conversie wordt ook bij het NT-filesysteem NTFS toegepast. Het MS-DOS verleden blijft zelfs NT achtervolgen ;-(.


Leo van Moergestel
<leovm@cable.A2000.nl>
Aangemaakt 10 december 1997
Laatst bijgewerkt 8 november 1998