Windows ونظام الملفات الحساس لحالة الأحرف

ذات مرة ، في فجر ولادتها ، استخدم Windows نظام الملفات FAT. ثم تم استبداله من قبل Microsoft و IBM المتقدمة NTFS. في تلك الأيام الخوالي ، ظهر نهجان متعارضان لنظام الملفات. يستخدم Linux نظام ملفات حساس لحالة الأحرف ، بينما تستخدم Microsoft حساسة لحالة الأحرف.

خلاصة القول هي أنه في نظام ملفات حساس لحالة الأحرف ، يعتبر أن الأسماء المكتوبة في تسجيلات مختلفة (على سبيل المثال ، FILE.txt و file.txt) هي أسماء مختلفة. ولكن بالنسبة لنظام التشغيل Windows ، لا يوجد فرق بينهما.



على الرغم من عدم التحسس لحالة Windows ، فقد تعامل مطورو NTFS مع الأمر بمسؤولية ، وحافظوا بعناية على سجل أسماء الملفات والملفات. ربما لم يفقدوا الأمل في التقارب مع المعسكر المتحارب.

الضحايا الأوائل


مرت سنوات ، ولم تقف تكنولوجيا المعلومات ثابتة ، وتعلمت توزيعات لينكس لتركيب أقسام NTFS. اقتربت أنظمة التشغيل ، وتصادم خصومنا لأول مرة في مجال واحد - وظهرت المشاكل الأولى. من خلال إرفاق قسم NTFS ، يمكن لمستخدم Linux إنشاء عدة ملفات مختلفة في نفس الدليل بأسماء تختلف فقط في الحالة. وكما نعلم ، يحفظ NTFS حالة الأحرف عند إنشاء كائنات نظام الملفات. إذا قمت فيما بعد بتوصيل نفس قسم NTFS بنظام Windows ، فسيبدأ نظام التشغيل في خلط الملفات الثنائية مع بعضها البعض. من وجهة نظرها ، لديهم نفس الاسم! ينقر المستخدم على ملف واحد ويفتح ملفًا مختلفًا تمامًا. باختصار ، الفوضى والعار.

في عام 2016 ، خطت Microsoft خطوة نحو Linux وأصدرت تحديث الذكرى السنوية لـ Windows 10 مع النظام الفرعي WSL. يوفر Windows Subsystem for Linux (WSL) واجهات متوافقة إلى حد كبير مع واجهات Linux kernel. يسمح لك هذا بتشغيل معظم تطبيقات Linux ، بما في ذلك الصور الأصلية لبعض توزيعات Linux. على سبيل المثال ، Ubuntu 14.04! لقد كانت ثورة! يعمل Linux و Windows على نفس جهاز الكمبيوتر في نفس الوقت ، مثل الشركاء. ولكن للأسف ، لا يزال الشركاء ينظرون بشكل مختلف إلى حساسية الحالة من حيث العمل مع نظام الملفات. أصبح الخلط بين Windows من خلال إنشاء ملفات أو أدلة بأسماء حساسة لحالة الأحرف أسهل.

محاولة المصالحة


في الإصدار الجديد من Windows 10 Spring Creators Update ، أضافت Microsoft القدرة على تعيين وضع الحساسية لحالة الأحرف في دليل واحد. يمكن القيام بذلك باستخدام الأداة المساعدة fsutil . ربما يكون القارئ على دراية بهذه الأداة المفيدة.

الآن لديها فريقان جديدان:

استعلام ملف fsutilCaseSensitiveInfo


تعيين ملف fsutilCaseSensitiveInfo



لاستخدام هذه الأوامر ، يجب أن تكون قد قمت بتنشيط نظام WSL الفرعي ، ويتطلب الأمر setCaseSensitiveInfo حقوق المسؤول.

بعد تشغيل وضع الحساسية لحالة الأحرف ، لن تتوفر الملفات والأدلة الموجودة في الداخل إلا إذا حددت اسمها بالضبط! ويرى Windows الآن بوضوح الفرق بين FILE.txt و file.txt.

من ناحية أخرى ، يجب على النظام الفرعي لـ WSL أيضًا مراعاة ما إذا كان وضع الحساسية لحالة الأحرف ممكّنًا أو معطلاً للدليل الذي يقوم فيه بإنشاء ملف أو دليل فرعي. الدلائل التي تشكل بنية WSL أو التي تم إنشاؤها من WSL تم تمكين الحساسية لحالة الأحرف على الفور. لا تعمل كافة الدلائل الأخرى على تمكين وضع تحسس حالة الأحرف بشكل افتراضي.

إذا ذهبت إلى الدليل في WSL مع إيقاف تشغيل الحساسية لحالة الأحرف وحاولت إنشاء ملفين فيه ، وستختلف أسماؤهما فقط حسب الحالة ، فسوف تحصل على خطأ.

وهكذا ، قسم WSL و Windows محرك الأقراص المنطقي بينهما. تدعم بعض الدلائل وضع الحساسية لحالة الأحرف ، بينما لا يدعمها البعض الآخر.

النزول أدناه


تحت الغطاء ، يتم استخدام الدالتين NtQueryInformationFile و NtSetInformationFile مع المعلمة FileCaseSensitiveInformation الجديدة للحصول على إشارة حساسية الحالة وتعيينها.

مثال:

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); // FileCaseSensitiveInformation CloseHandle(h); 

نتيجة لتشغيل الوظيفة ، سيكون المتغير csFlags 1 إذا تم تمكين وضع الحساسية لحالة الأحرف ، و 0 إذا تم تعطيله.

حتى أقل - NTFS الخام


على مستوى NTFS ، يتم تخزين علامة تحسس حالة الأحرف في سمة StandartInfoData في حقل NumVersion.
إذا تم تعيين السمة ، ثم NumVersion = 1 ، وإلا NumVersion = 0

 typedef struct _StandartInfoData_ { FILETIME CreateTime; FILETIME LastModTime; FILETIME LastModMFT; FILETIME LastAccess; DWORD FileAttrib; DWORD MaxVersions; DWORD NumVersion; // <-- DWORD ClassId; DWORD OwnerId; DWORD SecureId; ULONGLONG Quota; ULONGLONG SequenceNumber; } StandartInfoData; 

الخلاصة


نرى أن Microsoft تبذل جهودًا كبيرة لدمج عالمين مختلفين في نظام واحد - Windows و Linux. ومن أجل نجاح مهمتهم ، قدموا تنازلات من حيث حساسية حالة نظام الملفات الخاص بهم. هل ستساعد؟ هل سيتم حل التناقضات؟ وما هي المشاكل الأخرى التي ستظهر؟ كل هذا سيظهر فقط من خلال جلالة الملك.

مطلوب


بالمناسبة. أو ليس صحيحًا تمامًا. هنا ، يبحث زملائنا عن قائد مجموعة تطوير اختبارات السيارات. العمل الحقيقي في نوفوسيبيرسك. إذا كان شخص ما مهتمًا ، فهذا هو الشاغر .

Source: https://habr.com/ru/post/ar414239/


All Articles