"C: \ Program" नामक एक कार्यक्रम अन्य कार्यक्रमों को क्यों प्रभावित कर सकता है?


16

आज नीले रंग से बाहर एक फ़ाइल जिसे Programरूट पर दिखाया गया है C:\, और सिस्टम में लॉग इन करते समय, एक पॉपअप एक संदेश दिखाता है:

फ़ाइल का नाम चेतावनी

आपके कंप्यूटर पर "C: \ Program" नामक एक फ़ाइल या फ़ोल्डर है, जो कुछ अनुप्रयोगों को सही ढंग से काम नहीं कर सकता है। इसे "C: \ Program1" का नाम देकर समस्या का समाधान किया जाएगा। क्या आप इसे अभी नाम बदलना चाहेंगे?

जब संदेश स्व-व्याख्या कर रहा है, मुझे आश्चर्य है कि इस फ़ाइल का इतना बड़ा प्रभाव क्यों हो सकता है? वास्तव में, कुछ कार्यक्रम (शायद सभी, मैं जाँच नहीं करता था) स्थित C:\Program Files...थे जो बिल्कुल भी शुरू नहीं हुए थे। मैं समझ सकता हूं कि इस तरह की फाइल कैसे बनाई जा सकती है (उदाहरण के लिए, फ़ोल्डर को लिखने की कोशिश करना C:\Program Files\Something..., लेकिन उद्धरण के बिना), लेकिन मैं शायद ही समझ पाऊं कि यह अन्य कार्यक्रमों को कैसे प्रभावित कर सकता है।


1
आपको यकीन है कि यह विंडोज द्वारा उत्पन्न संदेश था?
रामहुंड

1
यीप, डबल प्रक्रिया Exploer से जाँच की है, यह explorer.exe से एक संवाद था
कोनराड Kokosa

2
स्केच लगता है, कोई भी प्रोग्राम (कुछ चुनिंदा के बाहर) को Program Files* विशिष्ट उपभोक्ता के अलावा कहीं भी स्थापित नहीं किया जाना चाहिए । लेकिन मुझे लगता है कि यह एक खोज के लिए खराब मिलान के बजाय मिल सकता है Program Files
nerdwaller

जवाबों:


27

Win32 एपीआई में लंबे समय से ज्ञात कमजोरी के कारण इसका इतना बड़ा प्रभाव है।

CreateProcess()सिस्टम कॉल के माध्यम से प्रोग्राम को Win32 में देखा जाता है। इसे कई तरह से इस्तेमाल किया जा सकता है। यूनिक्स, लिनक्स, या ओएस / 2 पृष्ठभूमि से आने वाले लोग आमतौर पर कार्यक्रम (छवि फ़ाइल) के लिए दो अलग-अलग तर्क लेने के लिए सोचेंगे और नई प्रक्रिया को पारित करने के लिए कमांड पूंछ, क्योंकि फ़ाइल नाम और तर्क वैक्टर / कमांड मेल करते हैं। उन ऑपरेटिंग सिस्टम के एपीआई में दो अलग-अलग चीजें हैं। लेकिन वास्तव में सिस्टम कॉल को वैकल्पिक रूप में प्रोग्राम नाम और एक बड़े स्ट्रिंग में एक साथ मैश किए गए तर्कों के साथ किया जा सकता है। CreateProcess()कमांड टेल से प्रोग्राम फाइलनाम को अलग करने का प्रयास करेंगे।

समस्या यह है कि यह क्रमिक रूप से प्रत्येक क्रमिक अंतरिक्ष चरित्र में जुड़वां में स्ट्रिंग को विभाजित करके करता है, जब तक कि बाएं हाथ का हिस्सा किसी फ़ाइल या निर्देशिका से मेल नहीं खाता। कई Win32 प्रोग्राम C:\Program Files\Contoso\TakeOver.exe StackExchange.comसिस्टम कॉल की तरह स्ट्रिंग्स पास करने का प्रयास करेंगे । यह सही प्रोग्राम चलाएगा - C:\Program Files\Contoso\TakeOver.exe- सही कमांड पूंछ के साथ - StackExchange.com- जब तक कि इस बिंदु पर कि कुछ स्पष्ट रूप से खतरनाक व्यक्ति साथ आता है और C:\Programआपके द्वारा किए गए फ़ाइल को बनाता है ।

उस बिंदु पर, C:\Programकमांड कॉल के साथ प्रोग्राम इमेज फाइल को चलाने की कोशिश में सिस्टम कॉल समाप्त होता है Files\Contoso\TakeOver.exe StackExchange.com। यदि C:\Programवास्तव में एक निष्पादन योग्य कार्यक्रम छवि है, तो स्वर्ग आपकी मदद करता है।

यह एक सामान्य कमजोरी है, और यह किसी भी प्रोग्राम के संयोजन में रिक्त स्थान वाले किसी भी प्रोग्राम फ़ाइलनाम पर लागू होता है जो अन्य कार्यक्रमों को स्पॉन करने के लिए वन बिग स्ट्रिंग का उपयोग करता है। लेकिन इसके द्वारा मारा जाने वाला सबसे सामान्य मामला उन सभी कार्यक्रमों का है, C:\Program Files\जो बड़ी संख्या में जीते हैं और बड़ी संख्या में Win32 प्रोग्राम हैं जो वन बिग स्ट्रिंग दृष्टिकोण का उपयोग करते हैं।

Win32 API को बदलने में बहुत देर हो चुकी है। एक दशक पहले बहुत देर हो चुकी थी। और Microsoft अन्य लोगों द्वारा लिखे गए सभी कार्यक्रमों को नहीं बदल सकता है जो दो के बजाय एक बड़ा स्ट्रिंग पास करते हैं CreateProcess()। इसलिए Microsoft, उपयोगकर्ता लॉगऑन पर, C:\Programआपके द्वारा देखी जाने वाली चेतावनी को प्रदर्शित करने और प्रदर्शित करने के लिए, विंडोज की जाँच करता है ।

और, जैसा कि आप देख सकते हैं, माइक्रोसॉफ्ट के Win32 डोको में एक बड़ी "सुरक्षा" चेतावनी है, डेवलपर्स को बता रहे हैं कि वे वन बिग स्ट्रिंग दृष्टिकोण का उपयोग करके प्रोग्राम नहीं लिख सकते हैं , जो अब कुछ वर्षों से है।

आगे की पढाई


6
बहुत बढ़िया जवाब! जैसा कि मैं डेवलपर हूं, अगली चीज जो मैं करूंगा वह जाहिर तौर पर एक डमी का निर्माण करना है C:\Program.exeजो इसके सभी कमांड लाइन मापदंडों को लॉग करता है। हम देखेंगे कि इसका उपयोग कौन करता है!
कोनराड कोकोसा

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