Paylaşılan ağ klasöründe bir dosya yazmaya çalıştığınızda bir "Error_access_denıed" hatası oluşuyor

Makale çevirileri Makale çevirileri
Makale numarası: 842792 - Bu makalenin geçerli olduğu ürünleri görün.
Önemli Bu makale, kayıt defterini düzenlemekle ilgili bilgiler içermektedir. Kayıt defterini değiştirmeden önce yedeklediğinizden ve bir sorun çıkması durumunda kayıt defterini geri nasıl yükleyeceğinizi anladığınızdan emin olun. Kayıt defterini yedekleme, geri yükleme ve düzenleme ile ilgili bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
256986Microsoft Windows Kayıt Defteri'nin Açıklaması
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

WriteFile işlevine BIR çağrı başarılı olmayabilir. Bu belirti, aşağıdaki koşullar geçerli olduğunda karşılaşabilirsiniz:
  • Microsoft Windows XP Service Pack 1 (SP1) çalıştıran bir istemci bilgisayar kullanıyorsunuz.
  • Bir ağ paylaşılan klasörde bulunan bir dosyayı yazmak için WriteFile işlevini kullanın.
  • Microsoft Windows 2000'i veya Microsoft Windows Server 2003 çalıştıran bir sunucu bilgisayarında paylaşılan klasördür.
Ayrıca, aşağıdaki hata iletisini alabilirsiniz:
ERROR_ACCESS_DENIED

Neden

Bu sorun, aşağıdaki koşullar doğru olduğunda oluşur:
  • Dosyayı oluşturmak için CreateFile işlevi kullanıldığında, yalnızca GENERIC_WRITE sabit dwDesiredAccess parametresinde belirtilen.
  • Sunucu ileti bloğu (SMB) imzalama, istemci bilgisayar ile sunucu bilgisayar arasındaki iletişim için etkinleştirilir.

Pratik Çözüm

Bu soruna geçici bir çözüm için aşağıdaki yöntemlerden birini kullanın:
  • GENERIC_READ sabit ve GENERIC_WRITE dwDesiredAccess parametrede sabit.
  • SMB imzalama değiştirin.

GENERIC_READ sabit ve GENERIC_WRITE sabit dwDesiredAccess parametresinde belirtin.

Dosyayı oluşturmak için şu kodu kullanın.

Not Aşağıdaki yertutucuları değiştirin:
  • ServerName yer tutucusu yerine, Windows 2000 veya Windows Server 2003 çalıştıran bir sunucu bilgisayar adını değiştirin.
  • Sunucu bilgisayardaki paylaşılan ağ klasörünü adını FolderName yer tutucuyu değiştirin.
// 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 imzalama değiştirme

Uyarı Kayıt Defteri Düzenleyicisi'ni yanlış kullanırsanız, işletim sisteminizi yeniden yüklemenizi gerektirebilecek ciddi sorunlara neden olabilir. Microsoft, Kayıt Defteri Düzenleyicisi yanlış kullanımından kaynaklanan sorunları çözebileceğinizi garanti edemez. Kayıt Defteri Düzenleyicisi'ni kullanmak kendi sorumluluğunuzdadır.
Sunucu bilgisayarda ve istemci bilgisayarda, aşağıdaki adımları izleyin:
  1. Kayıt Defteri Düzenleyicisi'nde, aşağıdaki kayıt defteri alt anahtarını bulun ve tıklatın:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. Kayıt Defteri Düzenleyicisi'nin sağ bölmesinde, ad alanı içindeki requiresecuritysignature sağ tıklatın ve sonra Değiştir ' i tıklatın. DWORD değerini Düzenle iletişim kutusu görüntülenir.
  3. Değer verisi kutusuna, 0 yazın ve Tamam ' ı tıklatın.
  4. Kayıt Defteri Düzenleyicisi'nden çıkın ve bilgisayarı yeniden başlatın.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Windows XP SP1 çalıştıran bir bilgisayarda, Microsoft Visual C++ 6.0 test adlı basit bir Win32 Console Application proje oluşturmak için kullanın. Varsayılan olarak, Test.cpp dosyası oluşturulur.
  2. CreateFile</a0> işlevini kullandığınızda dwDesiredAccess parametresinde GENERIC_WRITE sabit belirterek, bir dosya oluşturun.
  3. WriteFile işlevi dosyaya yazmak kullanın. Bunu yapmak için <a0></a0>, varolan Test.cpp dosyasındaki kodu aşağıdaki kodla yerini alır.

    Not Aşağıdaki yertutucuları değiştirin:
    • ServerName yer tutucusu yerine, Windows 2000 veya Windows Server 2003 çalıştıran bir sunucu bilgisayar adını değiştirin.
    • Sunucu bilgisayardaki paylaşılan ağ klasörünü adını FolderName yer tutucuyu değiştirin.
    :
    #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. Oluşturup sonra da uygulamayı çalıştırın. Bir konsol penceresi görünür. "Belirtiler" bölümünde açıklanan davranış oluşursa, konsol penceresinde aşağıdaki çıktıyı içerir:
    ERROR_ACCESS_DENIED hata oluştu.
    Devam etmek için bir tuşa basın.

Referanslar

CreateFile</a0> işlevini ve WriteFile işlevi hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin:
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

Özellikler

Makale numarası: 842792 - Last Review: 17 Ocak 2007 Çarşamba - Gözden geçirme: 1.5
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows XP Professional SP1, Ne zaman ne ile kullanilir:
    • Microsoft Windows Server 2003 Standard Edition
    • the operating system: Microsoft Windows 2000
  • Microsoft Windows XP Home Edition SP1, Ne zaman ne ile kullanilir:
    • Microsoft Windows Server 2003 Standard Edition
    • the operating system: Microsoft Windows 2000
Anahtar Kelimeler: 
kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:842792

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com