वर्तमान में हम WriteFile
पर कॉल की समस्या का सामना करते हैं (या, बल्कि CFile :: लिखें - लेकिन यह केवल आंतरिक रूप से WriteFile को कॉल करता है) Win32 त्रुटि 5
ERROR_ACCESS_DENIED
उत्पन्न करता है।WriteFile को ERROR_ACCESS_DENIED वापस करने का क्या कारण बनता है?
(संपादित करें:।! ध्यान दें कि हम व्यवहार repro नहीं कर सकते हैं सभी हम इस समय एक लॉगफ़ाइल स्रोत लाइन जहां CFile :: लिखें था यह दर्शाता है और त्रुटि ERROR_ACCESS_DENIED रूप युक्त)
(संपादित करें : फ़ाइल एक स्थानीय ड्राइव पर है और यह वास्तव में एक फ़ाइल और एक निर्देशिका नहीं है)
अब, WriteFiles's documentation वास्तव में मदद नहीं करता है, और एक साधारण परीक्षण-ऐप के साथ प्रयोग निम्नलिखित परिणाम प्राप्त होते हैं:।
- WriteFile कारण ERROR_ACCESS_DENIED को फ़ाइल फ़ाइल हैंडल के लिए बुलाया जाता है जो लिखने के लिए खोला नहीं जाता है (यानी। केवल पढ़ने के लिए खोला गया है)।
- यह नहीं कारण ERROR_ACCESS_DENIED जाएगा अगर
- संभाल मान्य नहीं है या फ़ाइल बिल्कुल
- पहुँच अधिकार, या लिखने संरक्षित झंडा फ़ाइल के लिए खुला नहीं है के बाद संशोधित किया गया है, इस प्रक्रिया को फ़ाइल द्वारा खोला गया है। (इन से पहले संशोधित रहे हैं, तो फ़ाइल को खोला जाता है, तो हम कभी नहीं WriteFile को मिलता है क्योंकि फ़ाइल खोलने असफल हो जायेगी।)
- फ़ाइल किसी भी तरह किसी अन्य प्रक्रिया/संभाल द्वारा अवरोधित किया गया है (यह होगा सबसे अच्छा परिणाम में त्रुटि में
32
ERROR_SHARING_VIOLATION)।
स्थिति, कि जाहिरा तौर पर इस कॉल के लिए केवल संभावना है, तो फ़ाइल वास्तव में पढ़ने ध्वज के बजाय लिखने ध्वज के साथ खोला गया था विफल साथ हमें छोड़ देता है। हालांकि, हमारे कोड को देखते हुए, यह बेहद असंभव लगता है। (हमारे ट्रेसिंग,
के कारण हम
सुनिश्चित करें कि WriteFile में विफल रहा है हो सकता है और
हम सुनिश्चित करें कि त्रुटि ERROR_ACCESS_DENIED है हो सकता है, हम नहीं खोलने झंडे के 100.1% यकीन है, हो सकता है क्योंकि इन बाहर का पता नहीं कर रहे हैं।)
क्या कोई अन्य ज्ञात परिस्थितियां हैं जहां WriteFile (CFile :: Write) एक ERROR_ACCESS_DENIED का कारण बनती है?
नोट:
- फ़ाइल
- सभी परीक्षणों मैं प्रदर्शन किया है कि जब तक संकेत मिलता है खुला किया गया था, इसलिए यह एक निर्देशिका नहीं हो या somesuch कर सकते हैं: अतिरिक्त इस सवाल के संदर्भ स्पष्ट करने के लिए फ़ाइल खुलती है इसे हटाया नहीं जा सकता है, इसलिए फ़ाइल अभी भी WriteFile
- पर कॉल पर मौजूद होना चाहिए फ़ाइल स्थानीय ड्राइव पर स्थित है, न कि नेटवर्क ड्राइव पर।
मुझे लगता है कि हम Windows XP SP3 पर चला रहे हैं और एप्लिकेशन को विजुअल स्टूडियो 2005
आप उद्घाटन झंडे क्यों नहीं पता लगा सकते हैं? यदि आप कोड को संपादित नहीं करना चाहते हैं, तो बस निरीक्षण करने के लिए प्रक्रिया मॉनीटर का उपयोग करें। –
निश्चित रूप से हम ट्रेसिंग जोड़ सकते हैं। यह केवल एक ग्राहक साइट पर थोड़ी देर में होता है। कोई रास्ता नहीं है कि हम वहां एक डीबगर जोड़ने में सक्षम होंगे। –
फ़ाइल सिस्टम फ़िल्टर ड्राइवर भी इसका कारण बन सकते हैं, एंटी-वायरस स्कैनर होने का सबसे स्पष्ट उदाहरण (हालांकि एन्क्रिप्शन जैसे अन्य लोग हैं)। – Luke