"error_access_denied" błąd występuje podczas próby zapisu do pliku, który znajduje się w udostępnionym folderze sieciowym

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 842792
Ważne Ten artykuł zawiera informacje dotyczące modyfikowania rejestru. Przed zmodyfikowaniem rejestru, upewnij się, że jego kopię zapasową i upewnij się, że użytkownik zrozumieć, jak przywrócić rejestr w przypadku pojawienia się problemu. Aby uzyskać informacje o kopii zapasowej, Przywracanie i edytowania rejestru, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
256986 Opis rejestru systemu Microsoft Windows
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Symptomy

Wywołanie WriteFile funkcja może się nie powieść. Ten symptom występuje, gdy są spełnione następujące warunki:
  • Korzystanie z komputera klienckiego z systemem Microsoft Windows XP Dodatek Service Pack 1 (SP1).
  • Możesz użyć WriteFile Funkcja próby zapisu plik znajduje się w udostępnionym folderze sieciowym.
  • Folder udostępniony jest na komputerze serwera, na którym jest uruchomiony Microsoft Windows 2000 lub Microsoft Windows Server 2003.
Ponadto może zostać wyświetlony następujący komunikat o błędzie:
ERROR_ACCESS_DENIED

Przyczyna

Ten problem występuje, gdy są spełnione następujące warunki:
  • Gdy używany CreateFile Funkcja służąca do tworzenia Plik określony tylko stałej GENERIC_WRITE w dwDesiredAccess parametr.
  • Server Message Block (SMB) rejestrowanie jest włączone dla Komunikacja między komputerem klienta a serwerem.

Obejście problemu

Aby obejść ten problem, użyj jednej z następujących metody:
  • Określ stała GENERIC_READ i GENERIC_WRITE stały dwDesiredAccess parametr.
  • Modyfikowanie podpisywanie SMB.

Określenie stałej GENERIC_READ i stałą GENERIC_WRITE w parametrze dwDesiredAccess

Poniższy kod umożliwia utworzenie pliku.

Uwaga Zamień następujące elementy zastępcze:
  • Zamień Nazwa_serwera symbol zastępczy nazwy komputera serwera, jest uruchomiony system Windows 2000 lub Windows Server 2003.
  • Zamień w Nazwa_folderu symbol zastępczy nazwy folderu udostępnionego w sieci komputer serwera.
// 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);

Modyfikowanie podpisywania SMB

Ostrzeżenie Nieprawidłowe użycie Edytora rejestru może spowodować poważne problemy, wymagające ponownego zainstalowania systemu operacyjnego. Microsoft nie gwarantuje rozwiązania problemów spowodowanych przy użyciu rejestru Edytor niepoprawnie. Użyj Edytora rejestru na własne ryzyko.
Wykonaj następujące kroki na komputerze serwera i na komputer klienta:
  1. W Edytorze rejestru zlokalizuj i kliknij następujące podklucz rejestru:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  2. W prawym okienku Edytora rejestru kliknij prawym przyciskiem myszyRequireSecuritySignature w Nazwa pola, a następnie kliknij przycisk Modyfikowanie. W Edytowanie wartości DWORDzostanie wyświetlone okno dialogowe.
  3. W Wartość danych pole typu0, a następnie kliknij przycisk OK.
  4. Zamknij Edytor rejestru, a następnie ponownie uruchom komputer.

Więcej informacji

Kroki do odtworzenia problemu

  1. Na komputerze z systemem Windows XP z dodatkiem SP1 należy użyć programu Microsoft Visual C++ 6.0, aby utworzyć prosty projekt aplikacji konsoli systemu Win32 jest o nazwie Test. Domyślnie tworzony jest plik Test.cpp.
  2. Tworzenie pliku przez określenie tylko stałej GENERIC_WRITE w dwDesiredAccess Parametr podczas korzystania CreateFile Funkcja.
  3. UżyjWriteFile Funkcja próby zapisu do pliku. Aby to zrobić, należy zastąpić istniejący kod w pliku Test.cpp z następującego kodu.

    Uwaga Zamień następujące elementy zastępcze:
    • Zamień Nazwa_serwera symbol zastępczy nazwy komputera serwera, jest uruchomiony system Windows 2000 lub Windows Server 2003.
    • Zamień w Nazwa_folderu symbol zastępczy nazwy folderu udostępnionego w sieci komputer serwera.
    :
    #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. Skompilować i uruchomić aplikację. Okna konsoli zostanie wyświetlone. Jeśli wystąpi zachowanie, wymieniony w sekcji "Symptomy", okno konsoli zawiera następujące dane wyjściowe:
    Wystąpił błąd ERROR_ACCESS_DENIED.
    Naciśnij dowolny klawisz klawisz, aby kontynuować.

Materiały referencyjne

Aby uzyskać więcej informacji na temat CreateFile Funkcja oraz WriteFile działać, odwiedź następujące sieci Web Microsoft Developer Network (MSDN) witryny:
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

Właściwości

Numer ID artykułu: 842792 - Ostatnia weryfikacja: 24 czerwca 2011 - Weryfikacja: 2.0
Słowa kluczowe: 
kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver kbmt KB842792 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to:842792

Przekaż opinię

 

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