أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

يحدث خطأ "ERROR_ACCESS_DENIED" عند محاولة الكتابة إلى ملف في مجلد شبكة مشترك

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية842792
هام تحتوي هذه المقالة على معلومات حول تعديل التسجيل. قبل تعديل السجل، تأكد من عمل نسخة احتياطية والتأكد من فهمك لطريقة استعادته في حالة حدوث مشكلة. للحصول على معلومات حول كيفية عمل نسخة احتياطية من السجل واستعادته وتحريره انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
256986وصف تسجيل Microsoft Windows
الأعراض
قد لا تنجح استدعاء الدالة WriteFile. تواجه هذا العَرض عند الشروط التالية:
  • استخدام جهاز كمبيوتر عميل يعمل بنظام التشغيل Microsoft Windows XP Service Pack 1 (SP1).
  • استخدام دالة WriteFile محاولة الكتابة إلى ملف في مجلد شبكة مشترك.
  • مجلد مشترك على كمبيوتر خادم يعمل بنظام التشغيل Microsoft Windows 2000 أو نظام التشغيل Windows Server 2003.
بالإضافة إلى ذلك، قد تظهر رسالة الخطأ التالية:
error_access_denied
السبب
تحدث هذه المشكلة عند الشروط التالية:
  • عند استخدام دالة CreateFile لإنشاء الملف المعيّن ثابت GENERIC_WRITE في المعلمة dwDesiredAccess.
  • يتم تمكين توقيع Message Block (SMB) الملقم الاتصال بين الكمبيوتر العميل وجهاز الكمبيوتر الملقم.
الحل البديل
كمحاولة للتغلب على هذه المشكلة استخدم إحدى الطرق التالية:
  • تعيين ثابت GENERIC_READ في GENERIC_WRITE ثابتة في المعلمة dwDesiredAccess.
  • تعديل توقيع SMB.

تعيين ثابت GENERIC_READ ثابت GENERIC_WRITE في المعلمة dwDesiredAccess

استخدام التعليمات البرمجية التالية لإنشاء الملف.

ملاحظة استبدل العناصر النائبة التالية:
  • استبدال العنصر النائب ServerName اسم كمبيوتر خادم يعمل بنظام التشغيل 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. على جهاز كمبيوتر يعمل بنظام التشغيل Windows XP SP1 ، استخدم Microsoft Visual C++ 6.0 لإنشاء مشروع تطبيق وحدة التحكم Win32 بسيط يسمى اختبار. افتراضياً، يتم إنشاء ملف Test.cpp.
  2. إنشاء ملف بتحديد ثابت GENERIC_WRITE في المعلمة dwDesiredAccess عند استخدام دالة CreateFile.
  3. استخدم الدالة WriteFile محاولة الكتابة إلى الملف. للقيام بذلك، قم باستبدال التعليمات البرمجية الموجودة في ملف Test.cpp التعليمة البرمجية التالية.

    ملاحظة استبدل العناصر النائبة التالية:
    • استبدال العنصر النائب ServerName اسم كمبيوتر خادم يعمل بنظام التشغيل 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) التالي على الويب:

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 842792 - آخر مراجعة: 01/17/2007 07:16:57 - المراجعة: 1.5

Microsoft Windows XP Professional SP1, Microsoft Windows XP Home Edition SP1

  • kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMtar
تعليقات