सवाल मेरी विंडोज मशीन पर, मेरे पास चार बिंदुओं के नाम वाला एक फ़ोल्डर था जो किसी प्रकार के खरगोश छेद की तरह काम करता था - यह कैसे हुआ?


फ़ोल्डर का नाम केवल फाइल चार एक्सप्लोरर के साथ फाइल एक्सप्लोरर में सूचीबद्ध था ....

जब मैंने इसे खोलने की कोशिश की, तो मैं किसी प्रकार के अंतहीन खरगोश छेद लूप में आया जहां मैंने बार-बार वही फ़ोल्डर खोला - मैं इसे अंतहीन तरीके से कर सकता था। जैसे पथ दिखा रहा है C:\ExamplePath\....\....\....\....\...., आदि।

यह एक विशिष्ट परियोजना में मेरे टाइपस्क्रिप्ट संकलन लटक रहा था। इस फ़ोल्डर और इसकी संबंधित समस्याओं को ढूंढने से पहले मुझे एक साल से अधिक समय लगा, क्योंकि यह नेस्टेड फ़ोल्डरों में गहराई से जड़ था। मैंने इस तरह की कोई समस्या कभी नहीं की, इसलिए मैंने कभी इसकी तलाश नहीं की।

मैं विशेष नाम की वजह से फ़ोल्डर को सामान्य तरीके से हटा नहीं सका। अंत में, मैं कमांड लाइन का उपयोग करके और मूल फ़ोल्डर को हटाकर इसे हटा सकता हूं rd /s /q path

इसके बाद, मैंने फ़ोल्डर को फिर से बनाने की कोशिश की लेकिन फ़ाइल एक्सप्लोरर और कमांड लाइन दोनों के साथ ऐसा करने में असमर्थ था।

विंडोज़ का उपयोग करने के अपने 20 से अधिक वर्षों में मैंने कभी भी इस बग को कभी नहीं देखा है, इसलिए मैं कल्पना कर सकता हूं कि यह शौकिया उपयोगकर्ताओं के लिए वास्तव में एक परेशान और भ्रमित समस्या होगी।

क्या कोई जानता है कि यह कैसे हो सकता है और इस मुद्दे को पुन: उत्पन्न कैसे किया जाए?

अद्यतन करें

रुचि रखने वाले लोगों के लिए: यह पथ एक टीएफएस फ़ोल्डर में गहराई से स्थित था। तो शायद टीएफएस बाईपास विधि @ ग्रोटी समझाता है ("विभिन्न फाइल प्रबंधक, संग्रहकर्ता, आदि")

क्या मैंने दुर्लभ टीएफएस बग पर ठोकर खाई?


191
2017-10-31 08:03


मूल


नीचे दिए गए उत्तरों का विवरण क्या हो रहा है, जानबूझकर इसे पुन: पेश कैसे करें, और इसे कैसे ठीक करें, लेकिन वे उल्लेख नहीं करते कि यह क्यों हुआ। जबसे .. 'एक फ़ोल्डर ऊपर जाना' इंगित करने के लिए पथ में उपयोग किया जा सकता है, मुझे लगता है कि लाइन के साथ कहीं भी, कुछ प्रोग्राम या स्क्रिप्ट ने पथ बनाने के लिए दो तारों को संयोजित किया, एक के साथ समाप्त हुआ .., और अगला के साथ शुरू हुआ .., और चूंकि यह नीचे वर्णित तकनीकों में से एक का उपयोग करता है, यह पथ बनाने में सफल रहा, भले ही यह उनके बीच फ़ोल्डर विभाजक गायब था। - 3D1T0R
अजीब चीजें तब भी होती हैं जब आप अपने नाम पर केवल रिक्त स्थान वाले फ़ोल्डर बनाते हैं - phuclv
क्या यह सर्वर इंटरनेट पर है? बस आपको चेतावनी देने के लिए मैं नियमित रूप से इंटरनेट सर्वर के वेब सर्वर पर हैक प्रयासों को अनुरोध करता हूं: GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini। जाहिर है कि वहां कुछ कमजोरता है / जहां यह शोषण करने का प्रयास करता है। - Andy Brown
@AndyBrown अधिक संभावना है कि .., नहीं ....। यह बस के लिए एक रास्ता है \winnt शुरुआती बिंदु (वेब ​​रूट) की गहराई के बावजूद, जब तक शुरुआती बिंदु 9 स्तर से कम गहरा होता है। यह इस तथ्य पर निर्भर करता है कि जा रहा है .. रूट निर्देशिका से आपको मूल निर्देशिका में छोड़ देता है। - hobbs
@ hobbs यह लिनक्स पर अपाचे एक्सेस लॉग से एक प्रतिलिपि और पेस्ट है। निश्चित रूप से 4 बिंदुओं में। अन्य हैक प्रयासों को लॉग इन किया गया है करना उपयोग .. यही कारण है कि मैंने यह एक अजीब पाया। - Andy Brown


जवाब:


Win32 आपको समाप्त होने वाले नामों के साथ फ़ाइलों या फ़ोल्डर्स बनाने की अनुमति नहीं देता है . - सभी बिंदु अंत से छीन लिया जाता है। बनाने की कोशिश कर रहा है test. बनाता है test इसके बजाय दिखाई देते हैं। (यह पुराने डॉस / विन 9एक्स युग सॉफ्टवेयर में 8.3 नामों के साथ संगतता के लिए है।)

नतीजतन, जब भी आप नामित फ़ोल्डर तक पहुंचने का प्रयास करते हैं ...., इसका नाम खाली स्ट्रिंग में कम हो जाता है, और आप उस फ़ोल्डर में वापस आ गए हैं जो आप पहले थे।

एनटी कर्नेल, हालांकि, ऐसे नामों की अनुमति देता है। ऐसे कई तंत्र हैं जो Win32 एपीआई द्वारा लगाए गए फ़ाइल नाम सीमाओं को बाईपास करते हैं - उदाहरण के लिए, डब्ल्यूएसएल (लिनक्स के लिए विंडोज सबसिस्टम) Win32 के शीर्ष पर नहीं चलता है और इससे प्रभावित नहीं होता है। वहाँ भी है \\?\ बाईपास विधि, कार्यक्रमों के लिए एक जानबूझकर "पिछवाड़े" छोड़ा गया जो जानता है कि वे क्या कर रहे हैं। भले ही आप नहीं बना सकते C:\Example\....\, आप कर सकते हैं सर्जन करना \\?\C:\Example\....\ बस ठीक।

इसी प्रकार आप इस तरह की निर्देशिकाओं को हटा सकते हैं rmdir \\?\C:\path\... सीएमडी से (मैंने अभी तक PowerShell के साथ परीक्षण नहीं किया है)।

विभिन्न फ़ाइल प्रबंधक, संग्रहकर्ता, आदि का उपयोग कर सकते हैं \\?\ सामान्य से अधिक लंबे पथ नामों का उपयोग करने में सक्षम होने के लिए विधि - और ऐसा करके, वे Win32 के भीतर संगतता कोड से भी प्रभावित नहीं हैं; वे डॉट स्ट्रिपिंग बाईपास करते हैं, साथ ही साथ जादू फ़ाइल नामों का अनुवाद भी करते हैं CON या NUL

तो यह आपके कार्यक्रमों में से एक हो सकता है:

  1. हमेशा उपयोग करता है \\?\ फ़ाइलों तक पहुंचने के लिए,
  2. गलती से नामित फ़ोल्डर बनाने की कोशिश की .... - लेकिन तथ्य के बाद निश्चित रूप से जानना वास्तव में संभव नहीं है।

295
2017-10-31 09:19



ऐसे फ़ोल्डर बनाने का एक और तरीका वैकल्पिक डेटा स्ट्रीम का उपयोग कर है। Cmd पर: echo "" > ....::$INDEX_ALLOCATION। यह नाम का एक फ़ोल्डर बना देगा .... (अभी भी वर्तमान फ़ोल्डर को इंगित कर रहा है)। - WorldSEnder
@DirkBoer मुझे यह मिला: docs.microsoft.com/en-us/dotnet/standard/io/... - user31389
माइक्रोसॉफ्ट इसे "विस्तारित पथ उपसर्ग" कहते हैं, और उस उपसर्ग वाले पथ को "विस्तारित-लंबाई पथ" कहा जाता है। (हास्यास्पद: जब आप खोजते हैं \\?\" जाल में संदर्भ स्रोत, यह उनके सर्वर पर रनटाइम त्रुटि का कारण बनता है)। - dlatikay
@ ग्रोटी तो। । । अब मुझे इस फ़ोल्डर को हटाने के बारे में कैसे जाना चाहिए? - Shadow503
मेरे पास एक उत्सुक 'कंप्यूटर मरम्मत' क्लाइंट केस था, जहां किसी भी समय क्लाइंट ने किसी भी विंडोज मशीन पर खाता बनाया था, यह ठीक काम करेगा लेकिन एक बार जब वह लॉग / रीबूट हो जाए तो वह उसे अपने खाते में नहीं जाने देगा, बल्कि इसके लिए एक अस्थायी खाता बनायेगा सत्र। स्थानीय पीसी की मरम्मत की दुकान स्टंप हो गई थी (उसे अभी भी चार्ज किया गया था)। उसका असली नाम बदल जाता है कॉन और वह हमेशा अपने विंडोज़ खाते के लिए अपना नाम इस्तेमाल करता था ..... उस दिन मैंने सीखा कि वहां से कहीं ज्यादा था com1 एक जादू फ़ाइल नाम के रूप में - RozzA


@ ग्रॉविटी के जवाब के अलावा, एक विन 32 प्रोग्राम भी "मूल" एपीआई को सीधे कॉल करके ऐसा कर सकता है। अगर मुझे गलत नहीं लगता है, तो वर्तमान स्थिति में, यह एनटीक्रेट डायरेक्टोरी ऑब्जेक्ट होगा। उन कॉलों को आजकल काफी अच्छी तरह से प्रलेखित किया गया है, विशेष रूप से उनके कर्नेल समकक्ष (जिसे आप Win32 प्रोग्राम से कॉल नहीं कर सकते), इस मामले में, ZwCreateDirectoryObject।

"अंतहीन गहराई" के संबंध में, इसे प्राप्त करने का एक आसान तरीका लिंक का उपयोग करना है। एक निर्देशिका बनाएं, उसके अंदर, इसके लिए एक जंक्शन बनाएं (आप इसका उपयोग कर सकते हैं mklink /j उदाहरण के लिए), और आप एक बहुत गहरी संरचना के साथ खत्म हो जाएगा। पिछली बार मैंने यह विंडोज 2000 पर किया था, फिर भी रिकर्सन का अंत हुआ था (हालांकि आप "असीम रूप से खोद नहीं सकते")। संभवतः नए ओएस पर सीमा बड़ी या हटा दी गई है, आप भी बना सकते हैं कि प्रत्येक 10 निर्देशिकाएं प्रत्येक के पिछले बच्चे हैं, और 10 वीं में, पहले लिंक पर एक लिंक बनाएं।


22
2017-10-31 13:28



यह बहुत संभवतः बुराई प्रतिभा सामग्री है ... - Agi Hammerthief
मैंने पूरी तरह से पूर्ण निर्देशिकाओं की प्रतिलिपि बनाई है ताकि कृत्रिम रूप से डिस्क को भरने के लिए यह निर्धारित किया जा सके कि यह सेट सीमा के करीब कब था। - mickeyf
साइगविन का उपयोग करके पुन: पेश करना भी संभव है mkdir .... - lucidbrot


निर्देशिका बनाने का एक आसान तरीका है। कमांड प्रॉम्प्ट से टाइप करें:

MD ....\

और एंटर दबाएं, यह चार बिंदुओं के साथ एक निर्देशिका बनाएगा। यह निर्देशिका एक्सप्लोरर के साथ भी देखने योग्य है।

एमएस-डॉस में एक दोष है जो संस्करण 1.0 पर वापस जाता है। एमएस कुछ समय के लिए इसके बारे में जानता है लेकिन इसे ठीक नहीं कर सका। उन्होंने PowerShell के साथ समस्या को सही किया है।

बीटीडब्ल्यू, यदि आप कोशिश करते हैं:

RD ....

यह हटाने में असफल हो जाएगा। इसे हटाने के लिए आपको इस विशिष्ट वाक्यविन्यास का उपयोग करने की आवश्यकता है।

RD ....\

मैं इसे कुछ सर्वरों पर उपयोग करता हूं जो मैं व्यवस्थापक करता हूं। मैं अक्सर डिस्क की जड़ पर एक उपयोगकर्ता फ़ोल्डर बनाते हैं और मैं नहीं चाहता कि कोई अन्य व्यवस्थापक साथ आकर उसे हटा दें।

तो मैं अपने फ़ोल्डर के अंदर जाऊंगा और कान, ऑक्स, या एलपीटी नामक सबफ़ोल्डर बनाउंगा ...

यदि कोई अन्य व्यवस्थापक मेरे फ़ोल्डर को हटाना चाहता है तो उन्हें यह जानने की आवश्यकता है कि पहले इस सबफ़ोल्डर को कैसे हटाया जाए।


16
2017-11-02 03:07



यह एक Win32 एपीआई दोष की तरह लगता है, यह देखते हुए कि कमांड प्रॉम्प्ट अब बीस साल से "एमएस-डॉस" नहीं रहा है। - grawity
दिलचस्प बात यह है कि, यदि मैं विंडोज एक्सप्लोरर में निर्देशिका को हटाने का प्रयास करता हूं, तो जब मैंने इसे आपके संस्करण के साथ बनाया तो यह क्रैश हो जाता है। जब मैंने इसे साइगविन के साथ बनाया, तो यह बस विफल हो जाता है और ऐसा कहता है। - lucidbrot
मेरे पास एक डॉस 3.3 और एक डॉस 6.0 मशीन है और कमांड उन पर काम करते हैं। जब वे 32 बिट पर स्विच करते थे तो समस्या अभी भी वहां थी। यह सभी सर्वर संस्करणों सहित, आज तक Win95 से सीएमडी विंडो में काम करता है। अब जब हम पावरहेल पर स्विच कर रहे हैं तो यह अब काम नहीं करता है। मुझे एहसास हुआ कि मैंने लिखा है कि यह निर्देशिका बनाता है लेकिन यह उस प्रभाव को प्रदान नहीं करता है जिसे ओपी देख रहा था। यदि मैं चार बिंदुओं के साथ निर्देशिका में सीडी करने की कोशिश करता हूं तो यह मुझे वापस लाता है। - Larryc
मेरे विंडोज 7 मशीन पर MD ....` only creates .... \ .... `पेड़ - रिकर्सन का केवल एक कदम है। - Tomáš Zato