سؤال على جهاز ويندوز الخاص بي ، كان لدي مجلد باسم أربع نقاط التي عملت مثل نوع من ثقب أرنب - كيف حدث ذلك؟


تم إدراج اسم المجلد في "مستكشف الملفات" مع أربع نقاط فقط .....

عندما حاولت فتحه ، جئت إلى نوع من حلقة ثقب الأرانب التي لا نهاية لها حيث فتحت المجلد نفسه بالضبط مراراً وتكراراً - يمكنني القيام بذلك بلا نهاية. عرض المسار مثل C:\ExamplePath\....\....\....\....\....وما إلى ذلك

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

لم أتمكن من حذف المجلد بالطريقة المعتادة بسبب الاسم الخاص. في النهاية ، يمكنني إزالته باستخدام سطر الأوامر وحذف المجلد الأصل مع rd /s /q path.

بعد ذلك ، حاولت إنشاء المجلد مرة أخرى ولكن لم أتمكن من القيام بذلك مع كل من مستكشف الملفات وسطر الأوامر.

في السنوات العشرين التي أمضيتها في استخدام Windows ، لم أشاهد هذا الخطأ من قبل ، لذا يمكنني أن أتخيل أنه سيكون مشكلة مزعجة ومربكة بالنسبة لمستخدمي الهواة.

لا أحد يعرف كيف يمكن أن يحدث هذا وكيفية إعادة إنتاج هذه المسألة؟

تحديث

للأشخاص المهتمين: تم تحديد موقع هذا المسار داخل مجلد TFS. لذلك ربما يستخدم TFS طريقة الالتفافية @ يشرح الجاذبية ("مختلف مديري الملفات ، والأرشيف ، إلخ")

هل تعثر على خلل TFS نادر؟


191
2017-10-31 08:03


الأصل


توضح الإجابات أدناه ما يحدث ، وكيفية إعادة إنتاجه عن قصد ، وكيفية إصلاحه ، لكنهم لا يذكرون سبب حدوثه. منذ .. يمكن أن تستخدم في مسار للإشارة إلى "صعود مجلد واحد" ، وأود أن خطر على التخمين أنه في مكان ما على طول الخط ، سلسل بعض البرنامج أو النصي سلسلتين لإنشاء مسار ، انتهت واحدة مع ..، والقادم بدأ مع ..وحيث أنها استخدمت إحدى التقنيات المذكورة أدناه ، فقد نجحت في إنشاء المسار ، على الرغم من أنه كان يفتقد فاصل المجلدات بينهما. - 3D1T0R
ستحدث أشياء غريبة أيضًا إذا قمت بإنشاء مجلد بمسافات فقط في اسمه - phuclv
هل هذا الخادم على الإنترنت؟ فقط لتحذيرك ، أرى بانتظام محاولات اختراق الإنترنت التي تواجه خوادم الويب التي تطلب: GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini. من الواضح أن هناك / كان بعض الضعف في مكان ما يحاول استغلاله. - Andy Brown
AndyBrown أكثر من المرجح هذا ..، ليس ..... انها مجرد وسيلة لاجتياز \winnt بغض النظر عن عمق نقطة البداية (جذر الويب) ، طالما أن نقطة البداية أقل من 9 مستويات. وهو يعتمد على حقيقة أن الذهاب .. من الدليل الجذر يترك لك في الدليل الجذر. - hobbs
hobbs هذه نسخة ولصق من سجل دخول Apache على linux. بالتأكيد 4 نقاط هناك. هناك محاولات اختراق أخرى مسجلة فعل استعمال .. وهذا هو السبب في أنني وجدت هذا واحد غريب بعض الشيء. - Andy Brown


الأجوبة:


لا يسمح لك Win32 بإنشاء ملفات أو مجلدات ذات أسماء تنتهي بها . - يتم تجريد جميع النقاط من النهاية. في محاولة لخلق test. يصنع test تظهر بدلا من ذلك. (هذا للتوافق مع أسماء 8.3 في برنامج قديم DOS / Win9x العصر.)

وكنتيجة لذلك ، عند محاولة الوصول إلى مجلد مسمى ....، يتم تقليل اسمها إلى السلسلة الفارغة ، وستعود إلى المجلد الذي كنت فيه من قبل.

ومع ذلك ، فإن نواة NT تسمح بهذه الأسماء. هناك العديد من الآليات التي تتجاوز قيود اسم الملف المفروضة من قبل Win32 APIs - على سبيل المثال ، لا يعمل WSL (نظام Windows الفرعي لـ Linux) أعلى Win32 ولا يتأثر به. هناك أيضا \\?\ طريقة الالتفافية ، "خلفي" متعمد في البرامج التي تعرف ما يفعلونه. على الرغم من أنك لا تستطيع إنشاء C:\Example\....\أنت يستطيع خلق \\?\C:\Example\....\ بخير.

وبالمثل ، يمكنك حذف هذه الأدلة مع rmdir \\?\C:\path\... من Cmd (لم أختبرها مع PowerShell حتى الآن).

يمكن لمديري الملفات المختلفة ، والأرشيف ، وما إلى ذلك استخدام \\?\ الطريقة لكي تتمكن من استخدام أسماء مسارات أطول من المعتاد - وبفعل ذلك ، فإنها أيضًا لا تتأثر برمز التوافق داخل Win32 ؛ تتجاوز نقطة تجريد ، فضلا عن ترجمة أسماء الملفات السحرية مثل CON أو NUL.

لذلك يمكن أن يكون أحد برامجك:

  1. يستخدم دائما \\?\ للوصول إلى الملفات ،
  2. حاول عن طريق الخطأ لإنشاء مجلد باسم .... - ولكن ليس من الممكن حقا أن نعرف على وجه اليقين بعد حقيقة واقعة.

295
2017-10-31 09:19



طريقة أخرى لإنشاء مثل هذا المجلد باستخدام دفق البيانات البديلة. على كمد: echo "" > ....::$INDEX_ALLOCATION. سيؤدي ذلك إلى إنشاء مجلد باسم .... (لا يزال يشير إلى المجلد الحالي). - WorldSEnder
DirkBoer لقد وجدت هذا: docs.microsoft.com/en-us/dotnet/standard/io/... - user31389
تسمي Microsoft هذا "بادئة المسار الموسع" ، والمسارات التي تحتوي على تلك البادئة تسمى "المسارات ذات الطول الموسع". (مضحك: عند البحث عنه \\?\" في الشباك مصدر مرجعي، يتسبب في حدوث خطأ وقت التشغيل على الخادم الخاص بهم). - dlatikay
@ الجاذبية لذلك. . . كيف أذهب عن حذف هذا المجلد الآن؟ - Shadow503
كان لدي قضية عميل "إصلاح الكمبيوتر" غريبة حيث في أي وقت قام العميل بعمل حساب على أي جهاز ويندوز ، فإنه يعمل على ما يرام ولكن بمجرد تسجيله / إعادة تشغيله لن يسمح له بالدخول إلى حسابه ، بدلاً من ذلك يقوم بإجراء حساب مؤقت جلسة. كان متجر الكمبيوتر المحلي إصلاحه متعثرا (اتهمته لا يزال). اتضح اسمه الفعلي هو كون & انه يستخدم دائما اسمه لحساب ويندوز له ..... في ذلك اليوم تعلمت أنه كان هناك أكثر من مجرد com1 كاسم سحري - RozzA


بالإضافة إلى إجابة @ grawity ، يمكن لبرنامج Win32 أيضًا القيام بذلك عن طريق استدعاء API "الأصلي" مباشرةً. إذا لم أكن مخطئا ، في هذه الحالة ، من شأنه أن يكون NtCreateDirectoryObject. هذه المكالمات يتم توثيقها بشكل جيد في الوقت الحاضر ، خاصةً نظيرتها kernel (التي لا يمكنك الاتصال من برنامج Win32) ، في هذه الحالة ، ZwCreateDirectoryObject.

فيما يتعلق "بالعمق اللامتناهي" ، طريقة سهلة لتحقيق ذلك هي استخدام الروابط. إنشاء دليل ، ثم داخله ، إنشاء تقاطع إليه (يمكنك استخدامه mklink /j على سبيل المثال) ، وسوف ينتهي بك الأمر بنية عميقة للغاية. آخر مرة فعلت هذا كان على نظام التشغيل Windows 2000 ، كان هناك نهاية للتكرار على الرغم من (لم أستطع "حفر بلا حدود"). من المحتمل أن يكون الحد الأقصى أو الذي تم إزالته أكبر من نظام التشغيل الجديد ، كما يمكن أن تخلق 10 دلائل على أن كل واحد منهم هو طفل في السابق ، وفي الحلقة 10 ، قم بإنشاء رابط إلى أول واحد.


22
2017-10-31 13:28



هذه المادة العبقرية الشريرة ربما هناك ... - Agi Hammerthief
لقد قمت بنسخ أدلة كاملة بالمثل على هذا النحو لملء القرص بشكل مصطنع من أجل اختبار القدرة على تحديد متى كان يقترب من حد معين. - mickeyf
من الممكن أيضًا إعادة الإنتاج باستخدام cygwin mkdir .... - lucidbrot


هناك طريقة أسهل لإنشاء الدليل. من نوع موجه الأوامر:

MD ....\

وضرب enter ، سيؤدي إلى إنشاء دليل بأربع نقاط. هذا الدليل قابل للعرض أيضًا مع المستكشف.

يوجد خلل في MS-DOS الذي يذهب إلى الإصدار 1.0. وقد عرفت MS عنها منذ بعض الوقت ولكن لا يمكن أو لا يمكن إصلاحه. لقد قاموا بتصحيح المشكلة مع PowerShell.

راجع للشغل ، إذا حاولت:

RD ....

سوف تفشل في الحذف. تحتاج إلى استخدام هذه البنية المحددة لإزالتها.

RD ....\

أنا استخدم هذا على خوادم معينة أنا المشرف. غالبًا ما أقوم بإنشاء مجلد مستخدم على جذر القرص ولا أريد أن يأتي مسؤول آخر ويزيله.

لذا سأذهب داخل مجلدي وأنشئ مجلدًا فرعيًا باسم CON أو AUX أو LPT ، الخ ...

إذا أراد مسؤول آخر إزالة المجلد الخاص بي ، فيجب عليه معرفة كيفية إزالة هذا المجلد الفرعي أولاً.


16
2017-11-02 03:07



هذا يبدو وكأنه خطأ في Win32 API ، بالنظر إلى أن موجه الأوامر لم يكن "MS-DOS" بعد الآن لمدة عشرين عاما الآن. - grawity
ومن المثير للاهتمام ، إذا حاولت حذف الدليل في مستكشف النوافذ ، فإنه يتعطل عند إنشائه مع الإصدار الخاص بك. عندما خلقت مع cygwin ، فإنه ببساطة يفشل ويقول ذلك. - lucidbrot
لدي جهاز DOS 3.3 وماكينة DOS 6.0 والأوامر تعمل عليها. عندما تحولوا إلى 32 بت كانت القضية لا تزال هناك. يعمل في إطار CMD من WIN95 طوال الطريق حتى اليوم ، بما في ذلك جميع إصدارات الخادم. الآن ننتقل إلى Powershell لم يعد يعمل. أدركت بعد أن كتبت أنه لا إنشاء الدليل لكنه لا يوفر التأثير الذي كان يرى OP. إذا حاولت أن أضع CD في الدليل مع أربع نقاط ، فهذا يعني أني أتراجع عني. - Larryc
على جهاز ويندوز 7 الخاص بي MD ....` only creates .... \ .... شجرة - هناك خطوة واحدة فقط من العودية. - Tomáš Zato