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


198

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

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

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

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

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

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

क्या किसी को पता है कि यह कैसे हो सकता है और इस मुद्दे को कैसे पुन: पेश करना है?

अपडेट करें

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

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


5
नीचे दिए गए जवाब क्या हो रहा है, इसे जानबूझकर कैसे पुन: पेश किया जाए, और इसे कैसे ठीक किया जाए, लेकिन वे इसका उल्लेख नहीं करते हैं कि ऐसा क्यों हुआ। चूँकि ..'एक फ़ोल्डर ऊपर जाना' को इंगित करने के लिए एक पथ का उपयोग किया जा सकता है, इसलिए मुझे यह अनुमान होगा कि कहीं न कहीं लाइन के साथ, कुछ प्रोग्राम या स्क्रिप्ट ने पथ बनाने के लिए दो तारों को मिलाया, एक के साथ समाप्त हुआ .., और अगले के साथ शुरू हुआ .., और चूंकि यह नीचे वर्णित तकनीकों में से एक का उपयोग करता था, इसलिए यह पथ बनाने में सफल रहा, भले ही यह उन दोनों के बीच फ़ोल्डर विभाजक को याद कर रहा था।
3D1T0R

6
अजीब चीजें भी होंगी यदि आप इसके नाम में केवल रिक्त स्थान के साथ एक फ़ोल्डर बनाते हैं
phuclv

7
क्या यह सर्वर इंटरनेट पर है? बस आपको चेतावनी देने के लिए मैं नियमित रूप से इंटरनेट पर हैकिंग के प्रयासों को वेब सर्वरों का सामना करते हुए देखता हूं GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini:। स्पष्ट रूप से कहीं न कहीं कुछ भेद्यता थी कि यह शोषण का प्रयास था।
एंडी ब्राउन

4
@AndyBrown अधिक संभावना है कि .., नहीं ....। यह केवल \winntशुरुआती बिंदु (वेब ​​रूट) की गहराई की परवाह किए बिना आगे बढ़ने का एक तरीका है , इसलिए जब तक प्रारंभिक बिंदु 9 से कम गहरा स्तर नहीं हो जाता। यह इस तथ्य पर निर्भर करता है कि ..रूट डायरेक्टरी से जाने से आपको रूट डायरेक्टरी पर छोड़ दिया जाता है।
hobbs

5
@hobbs यह एक प्रतिलिपि है और लिनक्स पर अपाचे एक्सेस लॉग से पेस्ट होता है। निश्चित रूप से वहाँ 4 डॉट्स। अन्य हैक प्रयास लॉग इन करते हैं ..जो उपयोग करते हैं यही कारण है कि मुझे यह एक अजीब नहीं मिला।
एंडी ब्राउन

जवाबों:


303

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

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

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

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

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

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

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

13
इस तरह के एक फ़ोल्डर बनाने का एक अन्य तरीका वैकल्पिक डेटा धाराओं का उपयोग करना है। सीएमडी पर echo "" > ....::$INDEX_ALLOCATION:। यह एक फ़ोल्डर बनाएगा जिसका नाम ....(अभी भी वर्तमान फ़ोल्डर की ओर इशारा करते हुए) है।
WorldSEnder

2
@DirkBoer मैंने इसे पाया: docs.microsoft.com/en-us/dotnet/standard/io/…
user31389

124
Microsoft इसे "विस्तारित पथ उपसर्ग" कहता है, और उस उपसर्ग के साथ पथ को "विस्तारित-लंबाई पथ" कहा जाता है। (मजाकिया: जब आप \\?\".NET संदर्भ स्रोत में खोजते हैं , तो यह उनके सर्वर पर रनटाइम त्रुटि का कारण बनता है)।
dlatikay

2
@ घबराहट तो। । । अब मुझे इस फ़ोल्डर को हटाने के बारे में कैसे जाना चाहिए?
शैडोक्रैम

21
मेरे पास एक जिज्ञासु 'कंप्यूटर रिपेयर' क्लाइंट केस था, जहाँ कभी भी क्लाइंट किसी भी विंडोज़ मशीन पर खाता बनाता था, यह ठीक काम करेगा, लेकिन एक बार लॉग इन / रिबूट होने के बाद यह उसे अपने खाते में नहीं आने देगा, बजाय एक अस्थायी खाता बनाने के सत्र। स्थानीय पीसी-मरम्मत की दुकान को स्टम्प्ड (उसे अभी भी चार्ज किया गया था)। उसका वास्तविक नाम कॉन है और उसने हमेशा अपने विंडोज़ खाते के लिए अपने नाम का इस्तेमाल किया ..... उस दिन मैंने सीखा कि com1जादू के नाम से ज्यादा कुछ नहीं था
RozzA

23

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

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


4
यह बहुत संभवत: बुराई जीनियस मटीरियल है ...
एगी हैमर्थीफ़

1
मैंने पूरी निर्देशिका को इसी तरह कॉपी किया है कि यह परीक्षण के लिए डिस्क को कृत्रिम रूप से भरने के लिए निर्धारित किया जा सकता है जब यह निर्धारित सीमा के करीब था।
मिकेफ

यह भी संभव है कि mkdir ....
साइबरविन

18

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

MD ....\

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

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

BTW, यदि आप कोशिश करते हैं:

RD ....

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

RD ....\

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

इसलिए मैं अपने फोल्डर के अंदर जाऊंगा और CON, AUX, या LPT, आदि नाम का सबफ़ोल्डर बनाऊंगा ...

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

EDIT: मैं आज सुबह इस चर्चा के बारे में सोच रहा था और मैंने इसे एक कदम आगे बढ़ाने का फैसला किया। मुझे लगता है कि mods तय करेंगे कि क्या यह प्रासंगिक है।

मैं फ़ोल्डर में सीडी करने में असमर्थ हूं।

गौर करें, अगर मैं MD c: \ test तो CD C: \ test और MD .... \ _ मैं C: \ test ... के साथ समाप्त करता हूं।

और सब ठीक है।

लेकिन सीडी .... विफल रहता है और मुझे वापस C: \ test में ले जाता है। (सीडी .... \ _ ही करता है।)

हालाँकि मैं DIR कर सकता हूँ .... और एक dir लिस्टिंग प्राप्त कर सकता हूँ। यह मुझसे भी हो सकता है

MD C: \ test .... \ temp और यह उस उप-dir को ... में बनाता है।

मैं C: \ test .... \ temp की सीडी भी बना सकता हूं और उस उप-उप निर्देशिका में जा सकता हूं।

लेकिन C: \ test .... \ temp में रहते हुए, अगर मैं CD .. मैं C: \ test में वापस आ गया हूं।

मैं उस निर्देशिका में cd नहीं कर सकता, लेकिन मैं सबफ़ोल्डर बनाकर फ़ोल्डर में हेरफेर कर सकता हूं, और काफी कुछ पसंद कर सकता हूं

ECHO "परीक्षण" >> C: \ test .... \ test.txt

यह भी काम करता है और उस फ़ोल्डर में एक फ़ाइल बनाता है। इसलिए मैं चार डॉट्स वाला एक फोल्डर बना सकता हूं, मैं उसमें फाइल्स और फोल्डर जोड़ सकता हूं, मैं इसकी डायर लिस्टिंग करवा सकता हूं, लेकिन मैं इसमें सीडी नहीं डाल सकता। क्या इसके लिए किसी तरह की बुरी प्रतिभा का इस्तेमाल हो सकता है? अगर मैं बहुत दूर से भटक गया हूँ तो मॉड के प्रति मेरी क्षमा याचना।


6
इसके बजाय एक Win32 एपीआई दोष की तरह लगता है, यह देखते हुए कि कमांड प्रॉम्प्ट अब लगभग बीस साल से "एमएस-डॉस" नहीं है।
ग्रिटिटी

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

मेरे पास एक डॉस 3.3 और एक डॉस 6.0 मशीनें हैं और कमांड उन पर काम करते हैं। जब उन्होंने 32 बिट पर स्विच किया तब भी समस्या जारी थी। यह सीएमडी विंडो में win95 से लेकर आज तक सभी सर्वर संस्करणों सहित सभी तरह से काम करता है। अब जब हम Powershell पर स्विच कर रहे हैं तो यह अब काम नहीं करता है। मुझे एहसास हुआ कि मैंने लिखा है कि यह निर्देशिका बनाता है लेकिन यह ओपी को देखने वाला प्रभाव प्रदान नहीं करता है। अगर मैं चार डॉट्स के साथ निर्देशिका में सीडी करने की कोशिश करता हूं तो यह मुझे वापस बाहर निकालता है।
लैरीकॉक

मेरी विंडोज 7 मशीन पर MD ....` only creates .... \ _ .... पेड़ - पुनरावृत्ति का केवल एक चरण है।
टॉम ज़ातो 10

उत्सुकता से एफएआर प्रबंधक इसे किसी भी तरह से विशेष नहीं देखता है, और किसी भी मुद्दे के साथ "बहुत सारे डॉट्स" नाम की निर्देशिकाओं की सामग्री का नाम बदलने / हटाने / बनाने / सूचीबद्ध करता है।
रोमनस्टैंड

-1

मुझे भी यही समस्या थी। मेरे मामले में, यह .NET कोर प्रकाशन के लिए कमांड में टाइपो था:

dotnet publish "Api.csproj" --output "....\output\"

इसने '....' नाम से निर्देशिका बनाई, जिसे मैं हटा या नाम नहीं बदल सका। इस निर्देशिका ने मूल निर्देशिका के संदर्भ की तरह काम किया। यदि मैं उस फ़ोल्डर के अंदर जाता हूं, तो मैं अभी भी पैरेंट फ़ोल्डर में था, लेकिन पथ को '....' द्वारा जोड़ा गया था।

मैंने इस विषय में उल्लिखित सभी आदेशों की कोशिश की, लेकिन उनमें से किसी ने भी काम नहीं किया। मेरी समझ में, यह उस तरह से काम करता था, क्योंकि मेरे पास मूल निर्देशिका में अन्य फाइलें और निर्देशिकाएं थीं, इसलिए मुझे ऐसे मापदंडों का उपयोग करना पड़ा जो सभी सामग्री को पुन: प्राप्त कर सकते हैं।

मुझे पता चला, कि यह आदेश:

rmdir /s /q ....\

'....' निर्देशिका निकाल सकते हैं। यह केवल मूल निर्देशिका के संदर्भ को हटा देता है, जो यह '....' निर्देशिका वास्तव में अधिक कुछ नहीं, कुछ भी कम नहीं है। आदेश तर्कों के बावजूद:

  • / s - निकाले गए निर्देशिका के अंदर की सभी सामग्री को हटा देता है,
  • / q - पुष्टि के बिना हटा देता है,

मूल निर्देशिका अछूती रही।


क्या आप स्पष्ट कर सकते हैं कि दूसरे कमांड ने आपके लिए काम क्यों किया?
बरगी

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

यह वास्तव में '....' के नाम से डायरेक्टरी को हटा देता है। यह केवल मूल निर्देशिका के संदर्भ को हटा देता है, जो यह '....' निर्देशिका वास्तव में अधिक कुछ नहीं, कुछ भी कम नहीं है। मैंने इस विषय में उल्लिखित सभी आदेशों की कोशिश की, लेकिन उनमें से कोई भी काम नहीं करता है। मेरी समझ में, इस कमांड ने काम किया, क्योंकि मेरे पास मूल निर्देशिका में अन्य फाइलें और निर्देशिकाएं थीं, इसलिए मुझे ऐसे मापदंडों का उपयोग करना पड़ा जो सभी सामग्री को पुन: हटा सकते हैं। कमांड तर्कों के बावजूद, मूल निर्देशिका अछूती रही।
मतुज

मैं विजुअल स्टूडियो के साथ किसी भी तरह से इस सटीक स्थिति में आ गया और इस कमांड ने घंटों की हताशा के बाद मेरे बेकन को बचाया कि वह क्या कर रहा था।
NPNelson
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.