Při pokusu o zápis do souboru ve sdílené síťové složce, dojde k chybě "ERROR_ACCESS_DENIED"

Překlady článku Překlady článku
ID článku: 842792 - Produkty, které se vztahují k tomuto článku.
Důležité: Tento článek obsahuje informace o úpravě registru. Před úpravami je nutné registr zazálohovat. Seznamte se také s postupem při obnovení registru v případě, že nastane problém. Informace o zálohování, obnovení a úpravě registru naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
256986Popis registru systému Microsoft Windows
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Volání funkce WriteFile pravděpodobně nebude úspěšné. Tento příznak se vyskytnout, když jsou splněny následující podmínky:
  • Používáte klientský počítač se systémem Microsoft Windows XP Service Pack 1 (SP1).
  • Při pokusu o zápis do souboru ve sdílené síťové složce pomocí funkce WriteFile.
  • Sdílené složky je v počítači serveru se systémem Microsoft Windows 2000 nebo Microsoft Windows Server 2003.
Může se také zobrazit následující chybová zpráva:
ERROR_ACCESS_DENIED

Příčina

Potíže nastanou v případě splnění následujících podmínek:
  • Při použití funkce CreateFile k vytvoření souboru v parametru dwDesiredAccess zadán pouze všeobecné_zápis konstanta.
  • Server podepisováním bloků zpráv (SMB) je povoleno pro komunikaci mezi klientským počítačem a počítači serveru.

Jak potíže obejít

Chcete-li tento problém vyřešit, použijte jeden z následujících postupů:
  • Zadat konstantu všeobecné_čtení a všeobecné_zápis konstantní parametr dwDesiredAccess.
  • Upravit podepisování SMB.

Zadat konstantu všeobecné_čtení a konstanta všeobecné_zápis parametr dwDesiredAccess

Následující kód použít k vytvoření souboru.

Poznámka: Nahraďte následující zástupné symboly:
  • Nahraďte zástupný symbol ServerName název počítače serveru se systémem Windows 2000 nebo Windows Server 2003.
  • Nahraďte zástupný symbol FolderName název síťové sdílené složky v počítači serveru.
// 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);

Upravit podepisování SMB

Upozornění Použijete-li Editor registru nesprávně, můžete způsobit vážné problémy, které mohou vyžadovat přeinstalaci operačního systému. Společnost Microsoft nemůže zaručit, že potíže vzniklé v důsledku nesprávného použití Editoru registru budete moci vyřešit. Editor registru používáte na vlastní nebezpečí.
V počítači serveru a v klientském počítači, postupujte takto:
  1. V Editoru registru vyhledejte následující podklíč registru a klikněte na něj:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. V pravém podokně Editoru registru klepněte pravým tlačítkem requiresecuritysignature v poli název a klepněte na příkaz změnit. Upravit hodnotu DWORD se zobrazí dialogové okno.
  3. V poli Údaj hodnoty zadejte hodnotu 0 a klepněte na tlačítko OK.
  4. Ukončete program Editor registru a restartujte počítač.

Další informace

Kroky pro reprodukci tohoto chování

  1. V počítači se systémem Windows XP SP1 slouží k vytvoření jednoduché aplikace konzoly Win32 projektu s názvem Test Microsoft Visual C++ 6.0. Ve výchozím nastavení je vytvořen soubor Test.cpp.
  2. Vytvořte soubor zadáním pouze konstanta všeobecné_zápis v parametru dwDesiredAccess při použití funkce CreateFile.
  3. Pomocí funkce WriteFile pokusu zapsat do souboru. Chcete-li to provést, nahraďte existující kód v souboru Test.cpp následující kód.

    Poznámka: Nahraďte následující zástupné symboly:
    • Nahraďte zástupný symbol ServerName název počítače serveru se systémem Windows 2000 nebo Windows Server 2003.
    • Nahraďte zástupný symbol FolderName název síťové sdílené složky v počítači serveru.
    :
    #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. Sestavit a spustit aplikaci. Zobrazí se okno konzoly. Pokud dochází k chování uvedena v "příznaky", obsahuje okno konzoly následující výstup:
    Došlo k chybě ERROR_ACCESS_DENIED.
    Stisknutím libovolné klávesy je možné pokračovat.

Odkazy

Další informace o funkce CreateFile a funkce WriteFile na webech Microsoft Developer Network (MSDN):
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

Vlastnosti

ID článku: 842792 - Poslední aktualizace: 17. ledna 2007 - Revize: 1.5
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Windows XP Professional SP1 na těchto platformách
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
  • Microsoft Windows XP Home Edition SP1 na těchto platformách
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
Klíčová slova: 
kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:842792

Dejte nám zpětnou vazbu

 

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