Errore di "ERROR_ACCESS_DENIED" si verifica quando si tenta di scrivere in un file in una cartella condivisa di rete

Traduzione articoli Traduzione articoli
Identificativo articolo: 842792 - Visualizza i prodotti a cui si riferisce l?articolo.
importante in questo articolo sono contenute informazioni su come modificare il Registro di sistema (chiamato Registro di configurazione in Windows NT). Prima di modificare il Registro di sistema, eseguire una copia di backup e assicurarsi di sapere come ripristinarlo in caso di problemi. Per ulteriori informazioni su come eseguire il backup, ripristinare e modificare il Registro di sistema, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
256986Descrizione del Registro di sistema di Microsoft Windows
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Una chiamata alla funzione WriteFile possibile che la non riesca. Si verifica di questo sintomo quando sono vere le seguenti condizioni:
  • Si utilizza un computer client che è in esecuzione Microsoft Windows XP Service Pack 1 (SP1).
  • La funzione WriteFile consente di tentare di scrivere in un file in una cartella condivisa di rete.
  • La cartella condivisa è su un computer server che esegue Microsoft Windows 2000 o Microsoft Windows Server 2003.
Inoltre, è possibile che venga visualizzato il seguente messaggio di errore:
ERROR_ACCESS_DENIED

Cause

Questo problema si verifica quando le seguenti condizioni sono vere:
  • Quando si utilizza la funzione CreateFile per creare il file, solo la costante GENERIC_WRITE è specificato nel parametro dwDesiredAccess .
  • Firma di Message Block (SMB) di server è attivata per la comunicazione tra il computer client e il computer server.

Workaround

Per risolvere il problema, utilizzare uno dei metodi descritti di seguito:
  • Specificare la costante GENERIC_READ e il GENERIC_WRITE costante nel parametro dwDesiredAccess .
  • Modificare la firma SMB.

Specificare la costante GENERIC_READ e costante GENERIC_WRITE nel parametro dwDesiredAccess

Utilizzare il codice riportato di seguito per creare il file.

Nota Sostituire i segnaposto seguenti:
  • Sostituire il segnaposto ServerName con il nome di un computer server che esegue Windows 2000 o Windows Server 2003.
  • Sostituire il segnaposto di FolderName con il nome di una cartella condivisa di rete del computer server.
// 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);

Modificare la firma SMB

avviso Se si utilizza Editor del Registro di sistema in modo non corretto, si potrebbero provocare problemi gravi che potrebbero richiedere la reinstallazione del sistema operativo. Microsoft non garantisce la che è possibile risolvere i problemi derivanti dall'errato utilizzo dell'editor del Registro di sistema. Utilizzare Editor del Registro di sistema a proprio rischio.
Attenersi alla seguente procedura sul computer server e sul computer client:
  1. Nell'editor del Registro di sistema, individuare e selezionare la seguente sottochiave del Registro di sistema:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. Nel riquadro di destra dell'editor del registro, fare clic con il pulsante destro del mouse requiresecuritysignature nel campo Nome e quindi fare clic su Modifica . Modifica valore DWORD viene visualizzata la finestra di dialogo.
  3. Nella casella dati valore digitare 0 e quindi fare clic su OK .
  4. Chiudere l'editor del Registro di sistema e riavviare il computer.

Informazioni

Procedura per riprodurre il problema.

  1. In un computer che esegue Windows XP SP1, è necessario utilizzare Microsoft Visual c ++ 6.0 per creare un progetto applicazione Console Win32 semplice denominato test. Per impostazione predefinita, viene creato il file Test.cpp.
  2. Creare un file specificando solo la costante GENERIC_WRITE nel parametro dwDesiredAccess , quando si utilizza la funzione CreateFile .
  3. Utilizzare la funzione di WriteFile per tentare di scrivere nel file. Per effettuare questa operazione, sostituire il codice esistente nel file Test.cpp con il codice riportato di seguito.

    Nota Sostituire i segnaposto seguenti:
    • Sostituire il segnaposto ServerName con il nome di un computer server che esegue Windows 2000 o Windows Server 2003.
    • Sostituire il segnaposto di FolderName con il nome di una cartella condivisa di rete del computer server.
    :
    #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. Generare ed eseguire quindi l'applicazione. Verrà visualizzata una finestra di console. Se il problema menzionato nella sezione "Sintomi" si verifica, la finestra della console contiene il seguente output:
    Si è verificato un errore ERROR_ACCESS_DENIED.
    Premere un tasto qualsiasi per continuare.

Riferimenti

Per ulteriori informazioni sulla funzione CreateFile e la funzione WriteFile , visitare i seguenti siti Web MSDN (informazioni in lingua inglese):
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

Proprietà

Identificativo articolo: 842792 - Ultima modifica: mercoledì 17 gennaio 2007 - Revisione: 1.5
Le informazioni in questo articolo si applicano a:
  • Microsoft Windows XP Professional SP1 alle seguenti piattaforme
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
  • Microsoft Windows XP Home Edition SP1 alle seguenti piattaforme
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
Chiavi: 
kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 842792
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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