Você está offline; aguardando reconexão

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

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
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
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):

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 842792 - Última Revisão: 01/17/2007 07:16:57 - Revisão: 1.5

Microsoft Windows XP Professional SP1, Microsoft Windows XP Home Edition SP1

  • kbmt kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver KB842792 KbMtpt
Comentários