में तय आईडीई ड्राइव को हटाने का पता लगाने समस्याजल्दी Windows XP
हमारी कंपनी विशेष Windows XP चला (विंडोज XPe, सटीक होना करने के लिए) उपकरणों बनाते हैं। हमारे सामने आने वाली असंबद्ध कानूनी आवश्यकताओं में से एक यह है कि हमें को तुरंत पता होना चाहिए कि निश्चित आईडीई ड्राइव हटा दिया गया है। कुछ सेकंड के भीतर जल्दी के रूप में।
प्रश्न में ड्राइव आईडीई ड्राइव हैं। वे ईडब्ल्यूएफ (एन्हांस्ड लिखित फ़िल्टर) परत के साथ लिखने से सॉफ्टवेयर-संरक्षित भी हैं। ईडब्ल्यूएफ परत फ़ाइल सिस्टम के तहत बैठती है, डिस्क को लिखने से बचाती है। यदि आप किसी ईडब्ल्यूएफ-संरक्षित वॉल्यूम पर कुछ बदलते हैं या लिखते हैं, तो वास्तविक परिवर्तन केवल मेमोरी परत में होते हैं (लेकिन फाइल सिस्टम को इसके बारे में पता नहीं है)।
समस्या यह है कि विंडोज़ स्वयं को निश्चित ड्राइव हटाने की सूचना नहीं देता है। आप मशीन से ड्राइव को खींच सकते हैं, और विंडोज एक्सप्लोरर आपको निर्देशिका ब्राउज़ करने और यहां तक कि फ़ाइलों को खोलने में भी प्रसन्न होगा यदि वे अभी भी स्मृति में कैश किए जाते हैं। और ईडब्ल्यूएफ परत के लिए धन्यवाद, मैं लापता ड्राइव पर फ़ाइलों को भी लिख सकता हूं।
मुझे एक स्वच्छ सॉफ्टवेयर-केवल समाधान की आवश्यकता है। आदर्श रूप से सी #/नेट 1.1 में, लेकिन मुझे पिनवोक या सी ++ का उपयोग करने में कोई समस्या नहीं है।
चीजें मैं नहीं कर सकता
- नहीं, मैं नए हार्डवेयर के साथ उपकरणों के हजारों पुनः स्थापित नहीं कर सकते।
- नहीं, हम कानूनी आवश्यकताओं को पूरा करने के लिए केवल सुपर-गोंद ड्राइव नहीं कर सकते हैं।
- नहीं, सामान्य फ़ाइल लिखना/पढ़ना स्थिति का पता नहीं लगाएगा, ईडब्ल्यूएफ परत के लिए धन्यवाद।
- नहीं, हम ईडब्ल्यूएफ परत को बंद नहीं कर सकते हैं।
- नहीं, मैं कानूनी आवश्यकताओं को अनदेखा नहीं कर सकता, भले ही वे मूर्ख हों।
- नहीं, मैं एक यूएसबी या अन्य हटाने योग्य ड्राइव के लिए जिस तरह से तय ड्राइव हटाने के बारे में पता नहीं लगा सकता। ये निश्चित ड्राइव हैं।
- नहीं, मैं डब्लूएमआई (विंडोज मैनेजमेंट इंस्ट्रुमेंटेशन) का उपयोग नहीं कर सकता। यह हमारी मशीनों पर स्थापित नहीं है।
- नहीं, मैं पिछले 1.1 के संस्करणों का उपयोग नहीं कर सकता। यह हमारे छोटे ड्राइव पर फिट नहीं होगा। (लेकिन एक आसान समाधान नेट की एक उच्च संस्करण में मौजूद रहने पर, मैं इसे वापस बंदरगाह करने में सक्षम 1.1 करने के लिए हो सकता है।)
वर्तमान अजीब समाधान
मैं खुश नहीं हूँ हमारे वर्तमान समाधान के साथ। मैं कुछ और सुरुचिपूर्ण और कुशल की तलाश में हूं।
जो मैं वर्तमान में कर रहा हूं वह दो धागे शामिल है।
थ्रेड ए ड्राइव का चुनाव करता है। यह पहले कर्नेल 32 का उपयोग कर ड्राइव पर एक विशेष फ़ाइल बनाता है।dll:
Kernel32.CreateFile(
filename,
File_Access.GenericRead | File_Access.GenericWrite,
File_Share.Read | File_Share.Write,
IntPtr.Zero,
CreationDisposition.CreateAlways,
CreateFileFlagsAndAttributes.File_Attribute_Hidden | CreateFileFlagsAndAttributes.File_Attribute_System,
IntPtr.Zero);
तो यह चुनाव ड्राइव
Kernel32.FlushFileBuffers(fileHandle);
ड्राइव निकाल दिया गया है को फोन करके, तो थ्रेड एक त्रुटि कोड लौटने से पहले एक लंबे समय के लिए रखती हूँ।
थ्रेड बी चुनाव धागा ए
धागा देखता है कि धागा एक बंद कर दिया गया (एक समय में एक विशेष चर अद्यतन नहीं किया है), तो बी थ्रेड एक घटना है कि ड्राइव कर दिया गया है को जन्म देती है हटा दिया।
मेरा वर्तमान समाधान काम करता है, लेकिन मुझे यह पसंद नहीं है। अगर कोई क्लीनर सॉफ्टवेयर-केवल समाधान जानता है, तो मैं इसकी सराहना करता हूं।
कुछ निश्चित डिस्क ड्राइव सरणी गर्म swappable हैं। – Powerlord
निश्चित रूप से, एससीएसआई और सैटा गर्म प्लग हैं। मैंने ओपी को यह मतलब लिया कि वे एक पाटा डिस्क आउट कर रहे थे। – snoone