Beim Schreiben in eine Datei, die in einem freigegebenen Netzwerkordner ist auftritt ein Fehler "ERROR_ACCESS_DENIED"

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 842792 - Produkte anzeigen, auf die sich dieser Artikel bezieht
wichtig Dieser Artikel enthält Informationen zum Ändern der Registrierung. Bevor Sie die Registrierung bearbeiten, vergewissern Sie sich bitte, dass Sie die Registrierung wiederherstellen können, falls ein Problem auftritt. Weitere Informationen zum Erstellen einer Sicherungskopie, zum Wiederherstellen und Bearbeiten der Registrierung finden Sie in folgendem Artikel der Microsoft Knowledge Base:
256986Beschreibung der Microsoft Windows-Registrierung
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Ein Aufruf von WriteFile -Funktion kann nicht ausgeführt. Dieses Symptom tritt Wenn folgenden Bedingungen erfüllt sind:
  • Sie verwenden einen Clientcomputer, auf dem Microsoft Windows XP Service Pack 1 (SP1) ausgeführt wird.
  • Können Sie die Funktion WriteFile versuchen, auf eine Datei zu schreiben, die in einem freigegebenen Netzwerkordner ist.
  • Der freigegebene Ordner ist auf einem Servercomputer, auf dem Microsoft Windows 2000 oder Microsoft Windows Server 2003 ausgeführt wird.
Darüber hinaus erhalten Sie folgende Fehlermeldung:
ERROR_ACCESS_DENIED

Ursache

Dieses Problem tritt auf, wenn folgende Bedingungen erfüllt sind:
  • Wenn Sie die Funktion CreateFile , verwendet um die Datei zu erstellen, werden nur die GENERIC_WRITE-Konstante im DwDesiredAccess -Parameter angegeben.
  • Server Message Block SMB-Signaturen () ist für die Kommunikation zwischen dem Client und dem Servercomputer aktiviert.

Abhilfe

Verwenden Sie eines der folgenden Methoden, um dieses Problem zu umgehen:
  • Geben Sie die GENERIC_READ-Konstante und die GENERIC_WRITE Konstante im DwDesiredAccess -Parameter.
  • Ändern Sie die SMB-Signierung.

Die Konstante GENERIC_READ und die GENERIC_WRITE-Konstante im DwDesiredAccess Parameter angeben

Verwenden Sie den folgenden Code, um die Datei zu erstellen.

Hinweis: Ersetzen Sie die folgenden Platzhalter:
  • Ersetzen Sie den ServerName Platzhalter mit dem Namen der einem Server-Computer mit Windows 2000 oder Windows Server 2003.
  • Ersetzen Sie den FolderName Platzhalter mit dem Namen einen freigegebenen Netzwerkordner auf dem Servercomputer.
// 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);

Ändern Sie die SMB-Signierung

Warnung Fehlerhafte Verwendung des Registrierungseditors kann schwerwiegende Probleme verursachen, die eine Neuinstallation Ihres Betriebssystems erforderlich machen. Microsoft kann nicht garantieren, dass Probleme, die Verwendung des Registrierungseditors entstehen, behoben werden können. Benutzen Sie den Registrierungseditor auf eigene Verantwortung.
Gehen Sie folgendermaßen vor, auf dem Servercomputer und auf dem Clientcomputer:
  1. Im Registrierungs-Editor, und klicken Sie dann auf den folgenden Registrierungsunterschlüssel:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. Klicken Sie im im rechten Bereich des Registrierungs-Editors mit der rechten Maustaste auf Requiresecuritysignature im Feld Name , und klicken Sie dann auf Ändern . Der DWORD-Wert bearbeiten wird das Dialogfeld angezeigt.
  3. Geben Sie 0 in das Feld Wert ein, und klicken Sie dann auf OK .
  4. Beenden Sie den Registrierungseditor, und starten Sie den Computer anschließend neu.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Verwenden Sie auf einem Computer, auf dem Windows XP SP1 ausgeführt wird Microsoft Visual C++ 6.0, um ein einfaches Win32-Konsolenanwendung Projekt zu erstellen, das mit dem Namen Test. Standardmäßig ist die Datei Test.cpp erstellt.
  2. Erstellen Sie eine Datei, indem Sie nur die GENERIC_WRITE-Konstante im DwDesiredAccess -Parameter angeben, wenn Sie die CreateFile -Funktion verwenden.
  3. Verwenden Sie die WriteFile -Funktion um zu versuchen, in die Datei zu schreiben. Ersetzen Sie dazu den vorhandenen Code in der Datei Test.cpp mit dem folgenden Code ein.

    Hinweis: Ersetzen Sie die folgenden Platzhalter:
    • Ersetzen Sie den ServerName Platzhalter mit dem Namen der einem Server-Computer mit Windows 2000 oder Windows Server 2003.
    • Ersetzen Sie den FolderName Platzhalter mit dem Namen einen freigegebenen Netzwerkordner auf dem Servercomputer.
    :
    #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. Erstellen Sie und führen Sie die Anwendung. Ein Konsolenfenster wird angezeigt. Wenn das Verhalten, das im Abschnitt "Problembeschreibung" erwähnte auftritt, enthält das Konsolenfenster die folgende Ausgabe:
    Ein ERROR_ACCESS_DENIED-Fehler aufgetreten.
    Weiter mit beliebiger Taste.

Informationsquellen

Informationen über die Funktion CreateFile und die Funktion WriteFile finden Sie auf den folgenden Websites von Microsoft Developer Network (MSDN):
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

Eigenschaften

Artikel-ID: 842792 - Geändert am: Mittwoch, 17. Januar 2007 - Version: 1.5
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows XP Professional SP1, wenn verwendet mit:
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
  • Microsoft Windows XP Home Edition SP1, wenn verwendet mit:
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
Keywords: 
kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 842792
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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