"ERROR_ACCESS_DENIED" त्रुटि तब होती है जब आप किसी नेटवर्क साझा फ़ोल्डर में फ़ाइल के लिए लिखने के लिए प्रयास करें


महत्वपूर्ण यह आलेख रजिस्ट्री में संशोधन करने के बारे में जानकारी है। यदि आप रजिस्ट्री को संशोधित करने से पहले, बैकअप लें, और सुनिश्चित करें कि आप कोई समस्या आने पर रजिस्ट्री को पुनर्स्थापित करने के लिए कैसे समझ करने के लिए सुनिश्चित करें। बैक अप लेने, पुनर्स्थापित करें और रजिस्ट्री का संपादन करने के बारे में जानकारी के लिए, Microsoft नॉलेज़ बेस में आलेख देखने के लिए निम्न आलेख संख्या पर क्लिक करें:
256986 Microsoft Windows रजिस्ट्री का विवरण

लक्षण


WriteFile फ़ंक्शन के लिए कॉल सफल नहीं हो सकता है। जब निम्न स्थितियाँ सत्य हैं, तो आप यह लक्षण अनुभव करते हैं:
  • यदि आप Microsoft Windows XP सर्विस पैक 1 (SP1) चल रहा है जो क्लाइंट कंप्यूटर उपयोग कर रहे हैं।
  • यदि आप किसी नेटवर्क साझा फ़ोल्डर में फ़ाइल के लिए लिखने के लिए प्रयास करने के लिए WriteFile फ़ंक्शन का उपयोग करें।
  • Microsoft Windows 2000 या Microsoft Windows Server 2003 चला रहे किसी सर्वर कंप्यूटर पर साझा किए गए फ़ोल्डर है।
साथ ही, आपको निम्न त्रुटि संदेश प्राप्त हो सकता है:
ERROR_ACCESS_DENIED

कारण


यह समस्या तब होती है जब निम्न स्थितियों के सत्य होने पर:
  • फ़ाइल बनाने के लिए CreateFile फ़ंक्शन का उपयोग करते हैं, आप केवल GENERIC_WRITE स्थिर dwDesiredAccess पैरामीटर में निर्दिष्ट है।
  • सर्वर संदेश ब्लॉक (SMB) हस्ताक्षर क्लाइंट कंप्यूटर और सर्वर कंप्यूटर के बीच संचार के लिए सक्षम किया गया है।

वैकल्पिक हल


इस समस्या को हल करने के लिए, या तो निम्न विधियों का उपयोग करें:
  • GENERIC_READ स्थिरांक ' और ' GENERIC_WRITE स्थिरांक dwDesiredAccess पैरामीटर में निर्दिष्ट करें।
  • SMB हस्ताक्षर को संशोधित करें।

DwDesiredAccess पैरामीटर में निर्दिष्ट करें GENERIC_READ स्थिरांक ' और ' GENERIC_WRITE स्थिरांक

फ़ाइल बनाने के लिए निम्न कोड का उपयोग करें।

नोट निम्न प्लेसहोल्डर बदलें:
  • सर्वर नाम प्लेसहोल्डर के साथ Windows 2000 या Windows Server 2003 चला रहे किसी सर्वर कंप्यूटर का नाम बदलें।
  • FolderName प्लेसहोल्डर वाले सर्वर कंप्यूटर पर किसी नेटवर्क साझा फ़ोल्डर का नाम बदलें।
// Specify the GENERIC_READ constant and the GENERIC_WRITE constant
// in the dwDesiredAccess parameter when you create the file.
hFile = CreateFile("\\\\ServerName\\FolderName\\Test.txt", GENERIC_READ |
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

SMB हस्ताक्षर को संशोधित करें

चेतावनी यदि आप रजिस्ट्री संपादक को ग़लत तरीके से प्रयोग, तो आपको अपने आपरेटिंग सिस्टम को पुनर्स्थापित करना पड़ सकता है गंभीर समस्याएँ पैदा हो सकता है। Microsoft गारंटी नहीं दे सकता कि आप रजिस्ट्री संपादक के ग़लत प्रयोग से होने वाली समस्याओं हल कर सकते हैं। रजिस्ट्री संपादक का उपयोग अपने जोखिम पर है।
क्लाइंट कंप्यूटर और सर्वर कंप्यूटर पर निम्न चरणों का पालन करें:
  1. रजिस्ट्री संपादक में, की स्थिति जानें, और उसके बाद निम्न रजिस्ट्री उपकुंजी क्लिक करें:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. दाहिने फलक की रजिस्ट्री संपादक में, राइट-क्लिक करें
    requiresecuritysignature में नाम फ़ील्ड, और उसके बाद संशोधित करेंक्लिक करें। DWORD मान का संपादन करेंसंवाद बॉक्स प्रकट होता है।
  3. मान डेटा बॉक्स में, टाइप करें
    0, और उसके बाद ठीकक्लिक करें।
  4. रजिस्ट्री संपादक से बाहर निकलें, और उसके बाद कंप्यूटर को पुनरारंभ करें।

अधिक जानकारी


व्यवहार को पुन: उत्पन्न करने के लिए चरण

  1. परीक्षण का नाम किसी साधारण Win32 कंसोल अनुप्रयोग प्रोजेक्ट बनाने के लिए Windows XP SP1 चला रहे कंप्यूटर पर, Microsoft Visual C++ 6.0 का उपयोग करें। डिफ़ॉल्ट रूप से, Test.cpp फ़ाइल बनाई जाती है।
  2. CreateFile फ़ंक्शन का उपयोग करें, तो केवल GENERIC_WRITE स्थिर dwDesiredAccess पैरामीटर में निर्दिष्ट करके एक फ़ाइल बनाएँ।
  3. का उपयोग करें
    फ़ाइल पर लिखने के लिए प्रयास करने के लिए WriteFile फ़ंक्शन है। ऐसा करने के लिए, Test.cpp फ़ाइल में मौजूदा कोड को निम्न कोड से बदलें।

    नोट निम्न प्लेसहोल्डर बदलें:
    • सर्वर नाम प्लेसहोल्डर के साथ Windows 2000 या Windows Server 2003 चला रहे किसी सर्वर कंप्यूटर का नाम बदलें।
    • FolderName प्लेसहोल्डर वाले सर्वर कंप्यूटर पर किसी नेटवर्क साझा फ़ोल्डर का नाम बदलें।
    :
    #include "stdafx.h"
    #include "windows.h"
    #include "stdio.h"
    #include "conio.h"

    void main()
    {
    HANDLE hFile;
    char lpBuffer[99999];
    DWORD lpNumberOfBytesWritten;

    // Write data to the buffer that you will
    // you use to write data to the file.
    for (int i = 0; i < 100000; ++i)
    lpBuffer[i] = 'a';

    // Specify only the GENERIC_WRITE constant in the
    // dwDesiredAccess parameter when you create the file.
    hFile = CreateFile("\\\\ServerName\\FolderName\\Test.txt",
    GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    // Try to write the data in the buffer to the file.
    // If the call to the WriteFile function fails,
    // call the GetLastError function.
    if (!WriteFile(hFile, lpBuffer, 100000, &lpNumberOfBytesWritten, NULL))

    // If an ERROR_ACCESS_DENIED error has occurred, inform the user.
    if (GetLastError() == ERROR_ACCESS_DENIED)
    {
    printf("An ERROR_ACCESS_DENIED error has occurred.");
    printf("Press any key to continue.");
    getch();
    }

    // Close the handle to the file.
    CloseHandle(hFile);
    }
  4. बनाएँ, और उसके बाद अनुप्रयोग चलाएँ। एक कॉनसोल विंडो प्रकट होता है। "लक्षण" खंड में वर्णित व्यवहार होता है, तो निम्न आउटपुट कॉनसोल विंडो में है:
    ERROR_ACCESS_DENIED में कोई त्रुटि उत्पन्न हुई।
    जारी रखने के लिए कोई भी कुंजी दबाएँ।

संदर्भ


CreateFile फ़ंक्शन के बारे में अधिक जानकारी के लिए और
WriteFile फ़ंक्शन, निम्न Microsoft डेवलपर नेटवर्क (MSDN) वेब साइट पर जाएँ: