Il était une fois, à l'aube de sa naissance, Windows utilisait le système de fichiers FAT. Ensuite, il a été remplacé par Microsoft et IBM a développé NTFS. En ces temps anciens, deux approches opposées du système de fichiers ont surgi. Linux utilise un système de fichiers sensible à la casse, tandis que Microsoft utilise la casse.
L'essentiel est que dans un système de fichiers sensible à la casse, il est considéré que les noms écrits dans des registres différents (par exemple, FILE.txt et file.txt) sont des noms différents. Mais pour Windows, il n'y a aucune différence entre eux.

Malgré l'insensibilité à la casse de Windows, les développeurs NTFS ont abordé la question de manière responsable et préservent soigneusement le registre des noms de répertoire et de fichier. Peut-être n'ont-ils pas perdu l'espoir d'un rapprochement avec le camp en guerre.
Premières victimes
Des années ont passé, les technologies de l'information ne sont pas restées immobiles et les distributions Linux ont appris à monter des partitions NTFS. Les systèmes d'exploitation se sont rapprochés et nos adversaires sont entrés en collision pour la première fois sur un champ - et les premiers problèmes sont apparus. En attachant une partition NTFS, un utilisateur Linux pourrait créer plusieurs fichiers différents dans le même répertoire avec des noms qui ne diffèrent qu'en cas. Et comme nous le savons, NTFS préserve la casse des lettres lors de la création d'objets du système de fichiers. Si vous connectez ultérieurement la même partition NTFS à Windows, le système d'exploitation commencera à confondre les fichiers jumeaux les uns avec les autres. De son point de vue, ils portent le même nom! L'utilisateur clique sur un fichier et en ouvre un complètement différent. Bref, chaos et honte.
En 2016, Microsoft a fait un pas vers Linux et a publié la mise à jour anniversaire de Windows 10 avec le sous-système WSL. Le sous-système Windows pour Linux (WSL) fournit des interfaces largement compatibles avec les interfaces du noyau Linux. Cela vous permet d'exécuter la plupart des applications Linux, y compris les images originales de certaines distributions Linux. Par exemple, Ubuntu 14.04! Ce fut une révolution! Linux et Windows fonctionnent sur le même ordinateur en même temps, en tant que partenaires. Mais malheureusement, les partenaires ont toujours regardé différemment la casse en termes de travail avec le système de fichiers. La confusion de Windows en créant des fichiers ou des répertoires avec uniquement des noms sensibles à la casse est devenue encore plus facile.
Tentative de réconciliation
Dans la nouvelle version de Windows 10 Spring Creators Update, Microsoft a ajouté la possibilité de définir le mode de respect de la casse pour un seul répertoire. Cela peut être fait à l'aide de l'utilitaire
fsutil . Le lecteur connaît probablement déjà cet utilitaire utile.
Maintenant, elle a deux nouvelles équipes:
fsutil file queryCaseSensitiveInfo
fsutil file setCaseSensitiveInfo
Pour utiliser ces commandes, vous devez avoir activé le sous-système WSL et la commande setCaseSensitiveInfo nécessite des droits d'administrateur.
Après avoir activé le mode respect de la casse, les fichiers et répertoires situés à l'intérieur ne seront disponibles que si vous spécifiez leur nom exact! Et Windows voit maintenant clairement la différence entre FILE.txt et file.txt.
D'un autre côté, le sous-système WSL doit également déterminer si le mode respectant la casse est activé ou désactivé pour le répertoire dans lequel il crée un fichier ou un répertoire enfant. Les répertoires qui forment une structure WSL ou qui sont créés à partir de WSL ont immédiatement la sensibilité à la casse activée. Tous les autres répertoires n'activent pas le mode de respect de la casse par défaut.
Si vous allez dans le répertoire WSL avec la sensibilité à la casse désactivée et essayez d'y créer deux fichiers, dont les noms ne différeront que par la casse, vous obtiendrez une erreur.
Ainsi, WSL et Windows ont divisé le lecteur logique entre eux. Certains répertoires prennent en charge le mode respectant la casse, d'autres non.
Descendez ci-dessous
Sous le capot, les fonctions NtQueryInformationFile et NtSetInformationFile avec le nouveau paramètre FileCaseSensitiveInformation sont utilisées pour obtenir et définir l'indicateur de respect de la casse.
Un exemple:
HANDLE h = CreateFile( path, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_SUPPORTS_USN_JOURNAL, 0); if( INVALID_HANDLE_VALUE == h ) return; IO_STATUS_BLOCK io; uint32_t csFlags = 0; DWORD error = NtQueryInformationFile( testHandle, &io, &csFlags, sizeof(csFlags), (FILE_INFORMATION_CLASS)0x47);
En raison du fonctionnement de la fonction, la variable csFlags sera 1 si le mode respectant la casse est activé et 0 s'il est désactivé.
Encore plus bas - NTFS brut
Au niveau NTFS, l'indicateur de respect de la casse est stocké dans l'attribut StandartInfoData, dans le champ NumVersion.
Si l'attribut est défini, alors NumVersion = 1, sinon NumVersion = 0
typedef struct _StandartInfoData_ { FILETIME CreateTime; FILETIME LastModTime; FILETIME LastModMFT; FILETIME LastAccess; DWORD FileAttrib; DWORD MaxVersions; DWORD NumVersion;
Conclusion
Nous voyons que Microsoft fait des efforts importants pour combiner deux mondes différents dans un seul système - Windows et Linux. Et pour le succès de leur mission, ils ont fait des concessions en termes de respect de la casse de leur système de fichiers. Cela va-t-il aider? Les contradictions seront-elles résolues? Et quels autres problèmes surgiront? Tout cela ne sera montré que par Sa Majesté le Temps.
Recherché
Au fait. Ou pas tout à fait raison. Ici, nos collègues recherchent le leader du groupe de développement des autotests. Du vrai travail à Novossibirsk. Si quelqu'un est intéressé,
voici le poste vacant .