Es war einmal, zu Beginn seiner Geburt, als Windows das FAT-Dateisystem verwendete. Dann wurde es durch Microsoft ersetzt und IBM entwickelte NTFS. In jenen alten Tagen gab es zwei gegensätzliche Ansätze für das Dateisystem. Linux verwendet ein Dateisystem, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, während Microsoft die Groß- und Kleinschreibung nicht berücksichtigt.
Die Quintessenz ist, dass in einem Dateisystem, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, davon ausgegangen wird, dass Namen, die in verschiedenen Registern geschrieben sind (z. B. FILE.txt und file.txt), unterschiedliche Namen sind. Aber für Windows gibt es keinen Unterschied zwischen ihnen.

Trotz der Unempfindlichkeit gegenüber Windows-Groß- und Kleinschreibung haben sich NTFS-Entwickler verantwortungsbewusst mit der Angelegenheit befasst und das Register der Verzeichnis- und Dateinamen sorgfältig aufbewahrt. Vielleicht haben sie nicht die Hoffnung auf eine Annäherung an das kriegführende Lager verloren.
Erste Opfer
Jahre vergingen, die Informationstechnologie blieb nicht stehen und Linux-Distributionen lernten, NTFS-Partitionen zu mounten. Betriebssysteme kamen näher und unsere Gegner kollidierten zum ersten Mal auf demselben Feld - und die ersten Probleme traten auf. Durch Anhängen einer NTFS-Partition kann ein Linux-Benutzer mehrere verschiedene Dateien im selben Verzeichnis mit Namen erstellen, die sich nur für den Fall unterscheiden. Und wie wir wissen, behält NTFS beim Erstellen von Dateisystemobjekten den Fall von Buchstaben bei. Wenn Sie später dieselbe NTFS-Partition mit Windows verbinden, beginnt das Betriebssystem, zwei Dateien miteinander zu verwechseln. Aus ihrer Sicht haben sie den gleichen Namen! Der Benutzer klickt auf eine Datei und öffnet eine völlig andere. Kurz gesagt, Chaos und Schande.
Im Jahr 2016 machte Microsoft einen Schritt in Richtung Linux und veröffentlichte das Windows 10 Anniversary Update mit dem WSL-Subsystem. Windows Subsystem für Linux (WSL) bietet Schnittstellen, die weitgehend mit Linux-Kernelschnittstellen kompatibel sind. Auf diese Weise können Sie die meisten Linux-Anwendungen ausführen, einschließlich der Originalabbilder einiger Linux-Distributionen. Zum Beispiel Ubuntu 14.04! Es war eine Revolution! Linux und Windows arbeiten gleichzeitig als Partner auf demselben Computer. Leider sahen die Partner die Groß- und Kleinschreibung bei der Arbeit mit dem Dateisystem immer noch anders. Das Verwirren von Windows durch Erstellen von Dateien oder Verzeichnissen, bei denen nur zwischen Groß- und Kleinschreibung unterschieden wird, ist noch einfacher geworden.
Versöhnungsversuch
In der neuen Version von Windows 10 Spring Creators Update hat Microsoft die Möglichkeit hinzugefügt, den Groß- und Kleinschreibung-Modus für ein einzelnes Verzeichnis festzulegen. Dies kann mit dem Dienstprogramm
fsutil erfolgen . Der Leser ist wahrscheinlich bereits mit diesem nützlichen Dienstprogramm vertraut.
Jetzt hat sie zwei neue Teams:
fsutil-Datei queryCaseSensitiveInfo
fsutil-Datei setCaseSensitiveInfo
Um diese Befehle verwenden zu können, müssen Sie das WSL-Subsystem aktiviert haben, und für den Befehl setCaseSensitiveInfo sind Administratorrechte erforderlich.
Nach dem Aktivieren des Groß- / Kleinschreibung-Modus sind die darin enthaltenen Dateien und Verzeichnisse nur verfügbar, wenn Sie ihren genauen Namen angeben! Und Windows sieht jetzt deutlich den Unterschied zwischen FILE.txt und file.txt.
Andererseits muss das WSL-Subsystem auch berücksichtigen, ob der Groß- / Kleinschreibung-Modus für das Verzeichnis aktiviert oder deaktiviert ist, in dem es eine Datei oder ein untergeordnetes Verzeichnis erstellt. Bei Verzeichnissen, die eine WSL-Struktur bilden oder aus WSL erstellt werden, ist die Groß- und Kleinschreibung sofort aktiviert. Alle anderen Verzeichnisse aktivieren standardmäßig nicht den Groß- / Kleinschreibung-Modus.
Wenn Sie mit deaktivierter Groß- und Kleinschreibung in das Verzeichnis in WSL wechseln und versuchen, zwei Dateien darin zu erstellen, deren Namen sich nur von Fall zu Fall unterscheiden, wird eine Fehlermeldung angezeigt.
Daher haben WSL und Windows das logische Laufwerk untereinander aufgeteilt. Einige Verzeichnisse unterstützen den Groß- / Kleinschreibung-Modus, andere nicht.
Geh unten runter
Unter der Haube werden die Funktionen NtQueryInformationFile und NtSetInformationFile mit dem neuen Parameter FileCaseSensitiveInformation verwendet, um das Groß- / Kleinschreibung-Flag abzurufen und zu setzen.
Ein Beispiel:
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);
Aufgrund der Funktionsweise der Funktion ist die Variable csFlags 1, wenn der Groß- / Kleinschreibung-Modus aktiviert ist, und 0, wenn sie deaktiviert ist.
Noch niedriger - Raw NTFS
Auf NTFS-Ebene wird das Groß- / Kleinschreibung-Flag im Attribut StandartInfoData im Feld NumVersion gespeichert.
Wenn das Attribut festgelegt ist, ist NumVersion = 1, andernfalls NumVersion = 0
typedef struct _StandartInfoData_ { FILETIME CreateTime; FILETIME LastModTime; FILETIME LastModMFT; FILETIME LastAccess; DWORD FileAttrib; DWORD MaxVersions; DWORD NumVersion;
Fazit
Wir sehen, dass Microsoft erhebliche Anstrengungen unternimmt, um zwei verschiedene Welten in einem System zu kombinieren - Windows und Linux. Und für den Erfolg ihrer Mission machten sie Zugeständnisse in Bezug auf die Groß- und Kleinschreibung ihres Dateisystems. Wird es helfen? Werden die Widersprüche gelöst? Und welche anderen Probleme werden auftauchen? All dies wird nur von Seiner Majestät Zeit gezeigt.
Gesucht
Übrigens. Oder nicht ganz richtig. Hier suchen unsere Kollegen den Leiter der Entwicklungsgruppe der Autotests. Wahre Arbeit in Nowosibirsk. Wenn jemand interessiert ist, dann ist
hier die Stelle .