2010-09-16 13 views
5

में तय आईडीई ड्राइव को हटाने का पता लगाने समस्याजल्दी 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); 

ड्राइव निकाल दिया गया है को फोन करके, तो थ्रेड एक त्रुटि कोड लौटने से पहले एक लंबे समय के लिए रखती हूँ।

थ्रेड बी चुनाव धागा ए

धागा देखता है कि धागा एक बंद कर दिया गया (एक समय में एक विशेष चर अद्यतन नहीं किया है), तो बी थ्रेड एक घटना है कि ड्राइव कर दिया गया है को जन्म देती है हटा दिया।


मेरा वर्तमान समाधान काम करता है, लेकिन मुझे यह पसंद नहीं है। अगर कोई क्लीनर सॉफ्टवेयर-केवल समाधान जानता है, तो मैं इसकी सराहना करता हूं।

उत्तर

1

मैं चौंक गया हूं और आश्चर्यचकित हूं कि यदि आप एक निश्चित आईडीई ड्राइव को निकाल देते हैं तो सिस्टम मृत पर नहीं गिरता है। पसंद है, वास्तव में चौंक गया। लेकिन, हे ...

क्या आप निश्चित रूप से सुपर गोंद के साथ इसे ठीक नहीं कर सकते हैं? :)

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

यह सुनिश्चित नहीं है कि आप किसी भी क्लीनर समाधान के साथ आने वाले हैं या नहीं। यदि आप वास्तव में, वास्तव में इसकी आवश्यकता है और इसे केवल XP की एक विशेष रिलीज तक सीमित कर सकते हैं, तो कोई यहां शामिल ड्राइवरों का विश्लेषण करने और पथ का शोषण करने में सक्षम हो सकता है जो आपको त्वरित परिणाम देगा। लेकिन इस बात से निपटने के लिए विंडोज़ में स्पष्ट रूप से कुछ भी वास्तुकार नहीं है और यह वास्तविक काम की तरह है।

स्कॉट

+0

कुछ निश्चित डिस्क ड्राइव सरणी गर्म swappable हैं। – Powerlord

+0

निश्चित रूप से, एससीएसआई और सैटा गर्म प्लग हैं। मैंने ओपी को यह मतलब लिया कि वे एक पाटा डिस्क आउट कर रहे थे। – snoone

0

तुम यहाँ में देखा है:

http://msdn.microsoft.com/en-us/library/aa363217(VS.85).aspx

आप के लिए क्या देख रहे तरह लग रहा है।

+0

विशेष रूप से 'GUID_IO_VOLUME_PHYSICAL_CONFIGURATION_CHANGE', लेकिन इसका उपयोग करने के लिए उसे पी/Invoke की आवश्यकता होगी। – Powerlord

+0

यह सब मानते हैं कि कोई वास्तव में नोटिस करता है कि डिवाइस चला गया है। – snoone

+0

मुझे यूएसबी ड्राइव जोड़ने/निकालने के लिए WM_DEVICECHANGE संदेश मिलते हैं, लेकिन आईडीई ड्राइव को बाहर निकालने के लिए नहीं। (आईडीई ड्राइव गर्म-स्वीकार्य नहीं है, और इसे हटाने के लिए नहीं है। लेकिन यह हमें कानूनी आवश्यकताओं से नहीं बचाता है।) –

संबंधित मुद्दे