Érase una vez, al amanecer de su nacimiento, Windows utilizó el sistema de archivos FAT. Luego fue reemplazado por Microsoft e IBM desarrolló NTFS. En aquellos viejos tiempos, surgieron dos enfoques opuestos para el sistema de archivos. Linux usa un sistema de archivos sensible a mayúsculas y minúsculas, mientras que Microsoft usa mayúsculas y minúsculas.
La conclusión es que en un sistema de archivos que distingue entre mayúsculas y minúsculas, se considera que los nombres escritos en diferentes registros (por ejemplo, FILE.txt y file.txt) son nombres diferentes. Pero para Windows no hay diferencia entre ellos.

A pesar de la insensibilidad de mayúsculas y minúsculas de Windows, los desarrolladores de NTFS han abordado el asunto de manera responsable y preservan cuidadosamente el registro de directorios y nombres de archivos. Quizás no perdieron la esperanza de acercarse al campamento en guerra.
Primeras víctimas
Pasaron los años, la tecnología de la información no se detuvo y las distribuciones de Linux aprendieron a montar particiones NTFS. Los sistemas operativos se acercaron, y nuestros oponentes por primera vez chocaron en el mismo campo, y aparecieron los primeros problemas. Al adjuntar una partición NTFS, un usuario de Linux podría crear varios archivos diferentes en el mismo directorio con nombres que difieren solo en el caso. Y como sabemos, NTFS conserva el caso de las letras al crear objetos del sistema de archivos. Si luego conecta la misma partición NTFS a Windows, el sistema operativo comenzará a confundir los archivos gemelos entre sí. Desde su punto de vista, ¡tienen el mismo nombre! El usuario hace clic en un archivo y abre uno completamente diferente. En resumen, caos y desgracia.
En 2016, Microsoft dio un paso hacia Linux y lanzó la Actualización de aniversario de Windows 10 con el subsistema WSL. El subsistema de Windows para Linux (WSL) proporciona interfaces que son en gran medida compatibles con las interfaces del kernel de Linux. Esto le permite ejecutar la mayoría de las aplicaciones de Linux, incluidas las imágenes originales de algunas distribuciones de Linux. Por ejemplo, Ubuntu 14.04! ¡Fue una revolución! Linux y Windows funcionan en la misma computadora al mismo tiempo, como socios. Pero desafortunadamente, los socios todavía veían de manera diferente la distinción entre mayúsculas y minúsculas en términos de trabajo con el sistema de archivos. Confundir Windows al crear archivos o directorios con solo nombres que distinguen entre mayúsculas y minúsculas se ha vuelto aún más fácil.
Intento de reconciliación
En la nueva versión de Windows 10 Spring Creators Update, Microsoft ha agregado la capacidad de configurar el modo de mayúsculas y minúsculas para un solo directorio. Esto se puede hacer usando la utilidad
fsutil . El lector probablemente ya esté familiarizado con esta útil utilidad.
Ahora tiene dos nuevos equipos:
fsutil file queryCaseSensitiveInfo
Archivo fsutil setCaseSensitiveInfo
Para utilizar estos comandos, debe haber activado el subsistema WSL, y el comando setCaseSensitiveInfo requiere derechos de administrador.
¡Después de activar el modo de distinción entre mayúsculas y minúsculas, los archivos y directorios ubicados dentro estarán disponibles solo si especifica su nombre exacto! Y Windows ahora ve claramente la diferencia entre FILE.txt y file.txt.
Por otro lado, el subsistema WSL también debe considerar si el modo de distinción entre mayúsculas y minúsculas está habilitado o deshabilitado para el directorio en el que crea un archivo o un directorio secundario. Los directorios que forman una estructura WSL o se crean a partir de WSL tienen inmediatamente habilitada la distinción entre mayúsculas y minúsculas. Todos los demás directorios no habilitan el modo de mayúsculas y minúsculas de forma predeterminada.
Si va al directorio en WSL con la distinción entre mayúsculas y minúsculas desactivada e intenta crear dos archivos en él, cuyos nombres diferirán solo por mayúsculas y minúsculas, obtendrá un error.
Por lo tanto, WSL y Windows dividieron la unidad lógica entre ellos. Algunos directorios admiten el modo de mayúsculas y minúsculas, mientras que otros no.
Abajo abajo
Bajo el capó, las funciones NtQueryInformationFile y NtSetInformationFile con el nuevo parámetro FileCaseSensitiveInformation se utilizan para obtener y establecer el distintivo de mayúsculas y minúsculas.
Un ejemplo:
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);
Como resultado de la operación de la función, la variable csFlags será 1 si el modo de mayúsculas y minúsculas está habilitado y 0 si está deshabilitado.
Aún más bajo: NTFS sin procesar
En el nivel NTFS, el indicador de mayúsculas y minúsculas se almacena en el atributo StandartInfoData, en el campo NumVersion.
Si se establece el atributo, NumVersion = 1, de lo contrario, NumVersion = 0
typedef struct _StandartInfoData_ { FILETIME CreateTime; FILETIME LastModTime; FILETIME LastModMFT; FILETIME LastAccess; DWORD FileAttrib; DWORD MaxVersions; DWORD NumVersion;
Conclusión
Vemos que Microsoft está haciendo esfuerzos significativos para combinar dos mundos diferentes en un solo sistema: Windows y Linux. Y para el éxito de su misión, hicieron concesiones en términos de la distinción entre mayúsculas y minúsculas de su sistema de archivos. ¿Ayudará? ¿Se resolverán las contradicciones? ¿Y qué otros problemas surgirán? Todo esto será mostrado solo por Su Majestad Time.
Wanteded
Por cierto O no del todo bien. Aquí, nuestros colegas buscan al líder del grupo de desarrollo de autotests. El verdadero trabajo en Novosibirsk. Si alguien está interesado, entonces
aquí está la vacante .