Era uma vez, no início de seu nascimento, o Windows usava o sistema de arquivos FAT. Em seguida, foi substituído pela Microsoft e a IBM desenvolveu o NTFS. Naquela época, surgiam duas abordagens opostas ao sistema de arquivos. O Linux usa um sistema de arquivos com distinção entre maiúsculas e minúsculas, enquanto a Microsoft usa sem distinção entre maiúsculas e minúsculas.
A conclusão é que, em um sistema de arquivos com distinção entre maiúsculas e minúsculas, considera-se que os nomes escritos em diferentes registros (por exemplo, FILE.txt e file.txt) são nomes diferentes. Mas para o Windows não há diferença entre eles.

Apesar da insensibilidade de caso do Windows, os desenvolvedores de NTFS abordaram o assunto de forma responsável e preservam cuidadosamente o registro dos nomes de diretório e arquivo. Talvez eles não tenham perdido a esperança de aproximação com o campo em guerra.
Primeiras vítimas
Os anos se passaram, a tecnologia da informação não parou e as distribuições Linux aprenderam a montar partições NTFS. Os sistemas operacionais se aproximaram e nossos oponentes colidiram pela primeira vez no mesmo campo - e os primeiros problemas apareceram. Ao anexar uma partição NTFS, um usuário Linux pode criar vários arquivos diferentes no mesmo diretório com nomes que diferem apenas no caso. E, como sabemos, o NTFS preserva o caso das letras ao criar objetos do sistema de arquivos. Se você posteriormente conectar a mesma partição NTFS ao Windows, o sistema operacional começará a confundir arquivos gêmeos. Do ponto de vista dela, eles têm o mesmo nome! O usuário clica em um arquivo e abre um completamente diferente. Em suma, caos e desgraça.
Em 2016, a Microsoft deu um passo em direção ao Linux e lançou a Atualização de Aniversário do Windows 10 com o subsistema WSL. O Windows Subsystem for Linux (WSL) fornece interfaces que são amplamente compatíveis com as interfaces do kernel do Linux. Isso permite que você execute a maioria dos aplicativos Linux, incluindo as imagens originais de algumas distribuições Linux. Por exemplo, Ubuntu 14.04! Foi uma revolução! Linux e Windows funcionam no mesmo computador ao mesmo tempo, como parceiros. Infelizmente, os parceiros ainda consideravam a diferenciação entre maiúsculas e minúsculas em termos de trabalho com o sistema de arquivos. Confundir o Windows criando arquivos ou diretórios com apenas nomes que diferenciam maiúsculas de minúsculas tornou-se ainda mais fácil.
Tentativa de reconciliação
Na nova versão do Windows 10 Spring Creators Update, a Microsoft adicionou a capacidade de definir o modo de distinção entre maiúsculas e minúsculas para um único diretório. Isso pode ser feito usando o utilitário
fsutil . O leitor provavelmente já está familiarizado com este utilitário útil.
Agora ela tem duas novas equipes:
arquivo fsutil queryCaseSensitiveInfo
arquivo fsutil setCaseSensitiveInfo
Para usar esses comandos, você deve ter ativado o subsistema WSL, e o comando setCaseSensitiveInfo requer direitos de administrador.
Depois de ativar o modo de distinção entre maiúsculas e minúsculas, os arquivos e diretórios localizados no interior estarão disponíveis apenas se você especificar o nome exato! E o Windows agora vê claramente a diferença entre FILE.txt e file.txt.
Por outro lado, o subsistema WSL também deve considerar se o modo de distinção entre maiúsculas e minúsculas está ativado ou desativado para o diretório em que ele cria um arquivo ou um diretório filho. Os diretórios que formam uma estrutura WSL ou são criados a partir da WSL imediatamente têm a distinção entre maiúsculas e minúsculas ativada. Todos os outros diretórios não ativam o modo de distinção entre maiúsculas e minúsculas por padrão.
Se você for para o diretório na WSL com a distinção entre maiúsculas e minúsculas desativada e tentar criar dois arquivos, cujos nomes diferem apenas por caso, você receberá um erro.
Assim, o WSL e o Windows dividiram a unidade lógica entre si. Alguns diretórios oferecem suporte ao modo de distinção entre maiúsculas e minúsculas, enquanto outros não.
Desça abaixo
Sob o capô, as funções NtQueryInformationFile e NtSetInformationFile com o novo parâmetro FileCaseSensitiveInformation são usadas para obter e definir o sinalizador de distinção entre maiúsculas e minúsculas.
Um exemplo:
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 da operação da função, a variável csFlags será 1 se o modo de distinção entre maiúsculas e minúsculas estiver ativado e 0 se estiver desabilitado.
Ainda mais baixo - NTFS bruto
No nível NTFS, o sinalizador de distinção entre maiúsculas e minúsculas é armazenado no atributo StandartInfoData, no campo NumVersion.
Se o atributo estiver definido, NumVersion = 1, caso contrário, NumVersion = 0
typedef struct _StandartInfoData_ { FILETIME CreateTime; FILETIME LastModTime; FILETIME LastModMFT; FILETIME LastAccess; DWORD FileAttrib; DWORD MaxVersions; DWORD NumVersion;
Conclusão
Vemos que a Microsoft está fazendo esforços significativos para combinar dois mundos diferentes em um sistema - Windows e Linux. E para o sucesso de sua missão, eles fizeram concessões em termos de distinção entre maiúsculas e minúsculas de seu sistema de arquivos. Isso vai ajudar? As contradições serão resolvidas? E que outros problemas surgirão? Tudo isso será demonstrado apenas pelo tempo de Sua Majestade.
Procurado
A propósito. Ou não está certo. Aqui, nossos colegas estão procurando o líder do grupo de desenvolvimento de testes automáticos. Verdadeiro trabalho em Novosibirsk. Se alguém estiver interessado,
aqui está a vaga .