Sekali waktu, pada awal kelahirannya, Windows menggunakan sistem file FAT. Kemudian digantikan oleh Microsoft dan IBM mengembangkan NTFS. Di masa lalu, dua pendekatan yang bertentangan dengan sistem file muncul. Linux menggunakan sistem file case-sensitive, sedangkan Microsoft menggunakan case-insensitive.
Intinya adalah bahwa dalam sistem file case-sensitive dianggap bahwa nama yang ditulis dalam register berbeda (misalnya, FILE.txt dan file.txt) adalah nama yang berbeda. Tetapi untuk Windows tidak ada perbedaan di antara mereka.

Meskipun Windows case insensitiveness, pengembang NTFS telah mendekati masalah ini secara bertanggung jawab, dan dengan hati-hati menyimpan daftar nama direktori dan file. Mungkin mereka tidak kehilangan harapan pemulihan hubungan dengan kamp yang bertikai.
Korban pertama
Tahun-tahun berlalu, teknologi informasi tidak berhenti, dan distribusi Linux belajar me-mount partisi NTFS. Sistem operasi semakin dekat, dan lawan kami untuk pertama kalinya bertabrakan di bidang yang sama - dan masalah pertama muncul. Dengan melampirkan partisi NTFS, pengguna Linux dapat membuat beberapa file berbeda di direktori yang sama dengan nama yang hanya berbeda dalam kasus. Dan seperti yang kita ketahui, NTFS mempertahankan huruf saat membuat objek sistem file. Jika nanti Anda menghubungkan partisi NTFS yang sama ke Windows, sistem operasi akan mulai membingungkan file kembar satu sama lain. Dari sudut pandangnya, mereka memiliki nama yang sama! Pengguna mengklik satu file, dan membuka file yang sama sekali berbeda. Singkatnya, kekacauan dan aib.
Pada tahun 2016, Microsoft mengambil langkah menuju Linux dan merilis Pembaruan Ulang Tahun Windows 10 dengan subsistem WSL. Windows Subsystem for Linux (WSL) menyediakan antarmuka yang sebagian besar kompatibel dengan antarmuka kernel Linux. Ini memungkinkan Anda untuk menjalankan sebagian besar aplikasi Linux, termasuk gambar asli dari beberapa distribusi Linux. Misalnya, Ubuntu 14.04! Itu adalah sebuah revolusi! Linux dan Windows bekerja di komputer yang sama pada saat yang sama, sebagai mitra. Namun sayangnya, mitra masih memandang berbeda pada sensitivitas kasus dalam hal bekerja dengan sistem file. Membingungkan Windows dengan membuat file atau direktori dengan hanya nama case-sensitive menjadi lebih mudah.
Mencoba rekonsiliasi
Dalam versi baru Pembaruan Windows 10 Spring Creators, Microsoft telah menambahkan kemampuan untuk mengatur mode sensitivitas kasus untuk satu direktori. Ini dapat dilakukan dengan menggunakan utilitas
fsutil . Pembaca mungkin sudah terbiasa dengan utilitas yang bermanfaat ini.
Sekarang dia memiliki dua tim baru:
file fsutil queryCaseSensitiveInfo
file fsutil setCaseSensitiveInfo
Untuk menggunakan perintah ini, Anda harus telah mengaktifkan subsistem WSL, dan perintah setCaseSensitiveInfo membutuhkan hak administrator.
Setelah mengaktifkan mode sensitivitas huruf besar, file dan direktori yang berada di dalamnya hanya akan tersedia jika Anda menentukan nama persisnya! Dan Windows sekarang dengan jelas melihat perbedaan antara FILE.txt dan file.txt.
Di sisi lain, subsistem WSL juga harus mempertimbangkan apakah mode sensitivitas huruf diaktifkan atau dinonaktifkan untuk direktori di mana ia membuat file atau direktori anak. Direktori yang membentuk struktur WSL atau dibuat dari WSL segera mengaktifkan sensitivitas case. Semua direktori lain tidak mengaktifkan mode sensitivitas huruf secara default.
Jika Anda pergi ke direktori di WSL dengan sensitivitas huruf dimatikan dan mencoba membuat dua file di dalamnya, yang namanya akan berbeda hanya berdasarkan kasus, Anda akan mendapatkan kesalahan.
Jadi, WSL dan Windows membagi drive logis di antara mereka sendiri. Beberapa direktori mendukung mode case-sensitivitas, sementara yang lain tidak.
Turun di bawah
Di bawah tenda, fungsi NtQueryInformationFile dan NtSetInformationFile dengan parameter FileCaseSensitiveInformation baru digunakan untuk mendapatkan dan mengatur flag sensitivitas huruf.
Contoh:
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);
Sebagai hasil dari operasi fungsi, variabel csFlags akan menjadi 1 jika mode sensitivitas huruf diaktifkan, dan 0 jika dinonaktifkan.
Bahkan Lebih Rendah - NTFS Mentah
Pada tingkat NTFS, flag sensitivitas huruf disimpan di atribut StandartInfoData, di bidang NumVersion.
Jika atribut diatur, maka NumVersion = 1, jika tidak NumVersion = 0
typedef struct _StandartInfoData_ { FILETIME CreateTime; FILETIME LastModTime; FILETIME LastModMFT; FILETIME LastAccess; DWORD FileAttrib; DWORD MaxVersions; DWORD NumVersion;
Kesimpulan
Kami melihat bahwa Microsoft melakukan upaya signifikan untuk menggabungkan dua dunia berbeda dalam satu sistem - Windows dan Linux. Dan untuk keberhasilan misi mereka, mereka membuat konsesi dalam hal sensitivitas kasus sistem file mereka. Akankah ini membantu? Apakah kontradiksi akan diselesaikan? Dan masalah apa lagi yang akan muncul? Semua ini hanya akan ditunjukkan oleh Yang Mulia Waktu.
Dicari
Ngomong-ngomong. Atau kurang tepat. Di sini, kolega kami mencari pemimpin kelompok pengembangan autotest. Pekerjaan nyata di Novosibirsk. Jika seseorang tertarik, maka
ini adalah lowongannya .