Um erro de "ERROR_ACCESS_DENIED" ocorre quando você tenta gravar em um arquivo que está em uma pasta compartilhada da rede

Traduções deste artigo Traduções deste artigo
ID do artigo: 842792 - Exibir os produtos aos quais esse artigo se aplica.
importante Este artigo contém informações sobre como modificar o registro. Antes de modificar o registro, certifique-se de backup e certifique-se que você saiba como restaurar o registro se ocorrer um problema. Para obter informações sobre como fazer backup, restaurar e editar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
256986Descrição do registro do Microsoft Windows
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Uma chamada para a função WriteFile não pode ter êxito. Você enfrenta esse sintoma ao seguintes condições forem verdadeiras:
  • Você está usando um computador cliente que está executando o Microsoft Windows XP Service Pack 1 (SP1).
  • Use a função WriteFile para tentar gravar em um arquivo que está em uma pasta compartilhada da rede.
  • A pasta compartilhada está em um computador servidor que está executando o Microsoft Windows 2000 ou Microsoft Windows Server 2003.
Além disso, você receberá a seguinte mensagem de erro:
ERROR_ACCESS_DENIED

Causa

Esse problema ocorre quando as seguintes condições forem verdadeiras:
  • Ao usar a função CreateFile para criar o arquivo, você especificou somente a constante GRAVAÇÃO_GENÉRICA no parâmetro dwDesiredAccess .
  • Assinatura de SMB (bloco de mensagens) do servidor é habilitada para comunicação entre o computador cliente e o computador servidor.

Como Contornar

Para contornar este problema, use um dos seguintes métodos:
  • Especificar a constante GENERIC_READ e o GRAVAÇÃO_GENÉRICA constante no parâmetro dwDesiredAccess .
  • Modificar a assinatura SMB.

Especificar a constante GENERIC_READ e a constante GRAVAÇÃO_GENÉRICA no parâmetro dwDesiredAccess

Use o código a seguir para criar o arquivo.

Observação Substitua os seguintes espaços reservados:
  • Substitua o espaço reservado ServerName nome de um computador servidor que esteja executando o Windows 2000 ou Windows Server 2003.
  • Substitua o espaço reservado FolderName pelo nome de uma pasta compartilhada de rede no computador servidor.
// 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);

Modificar a assinatura SMB

Aviso Se você usar o Editor do Registro incorretamente, você pode causar problemas sérios que talvez exijam a reinstalação do sistema operacional. A Microsoft não garante que você pode resolver problemas resultantes do uso incorreto do Editor do Registro. Use o Editor do registro por sua própria conta e risco.
Siga estas etapas no computador servidor e no computador cliente:
  1. No Editor do Registro, localize e, em seguida, clique na seguinte subchave do Registro:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
  2. No painel direito do Editor do Registro, clique requiresecuritysignature no campo nome com o botão direito do mouse e, em seguida, clique em Modificar . Editar valor DWORD caixa de diálogo é exibida.
  3. Na caixa dados do valor , digite 0 e, em seguida, clique em OK .
  4. Feche o Editor do Registro e, em seguida, reinicie o computador.

Mais Informações

Etapas para reproduzir o comportamento

  1. Em um computador que está executando o Windows XP SP1, use o Microsoft Visual C++ 6.0 para criar um projeto Win32 Console Application simples chamado Test. Por padrão, o arquivo Test.cpp é criado.
  2. Crie um arquivo especificando somente a constante GRAVAÇÃO_GENÉRICA no parâmetro dwDesiredAccess quando você usa a função CreateFile .
  3. Use a função WriteFile para tentar gravar no arquivo. Para fazer isso, substitua o código existente no arquivo Test.cpp com o código a seguir.

    Observação Substitua os seguintes espaços reservados:
    • Substitua o espaço reservado ServerName nome de um computador servidor que esteja executando o Windows 2000 ou Windows Server 2003.
    • Substitua o espaço reservado FolderName pelo nome de uma pasta compartilhada de rede no computador servidor.
    :
    #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. Criar e executar o aplicativo. Uma janela de console é exibida. Se ocorrer o comportamento mencionado na seção "Sintomas", a janela de console contém a seguinte saída:
    Ocorreu um erro ERROR_ACCESS_DENIED.
    Pressione qualquer tecla para continuar.

Referências

Para obter mais informações sobre a função CreateFile e a função WriteFile , visite os seguintes sites da Microsoft Developer Network (MSDN):
CreateFile
http://msdn2.microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.microsoft.com/en-us/library/aa365747.aspx

Propriedades

ID do artigo: 842792 - Última revisão: quarta-feira, 17 de janeiro de 2007 - Revisão: 1.5
A informação contida neste artigo aplica-se a:
  • Microsoft Windows XP Professional SP1 nas seguintes plataformas
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
  • Microsoft Windows XP Home Edition SP1 nas seguintes plataformas
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • the operating system: Microsoft Windows 2000
Palavras-chave: 
kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 842792

Submeter comentários

 

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