Pasta compartilhada e com permissão
Olá amigos, gostaria de sabe se alguém tem uma solução para um problema que estou tendo. Meu sistema acessa uma pasta compartilhada no servidor, ex.: \\servidor\pastasistema$\, acontece que essa pasta tem senha e usuário para acessar. Gostaria de saber como que faço para meu sistema se conectar, deixaria uma senha e senha salva dentro do sistema e assim não importa que esteja conectado no PC meu sistema teria acesso a essa pasta e o usuário pelo windows, fora do sistema, ainda não teria acesso. Desde já agradeço a ajuda de todos.
Anderson Ferreira
Curtidas 0
Respostas
Anderson Ferreira
25/05/2021
Olá amigos, gostaria de sabe se alguém tem uma solução para um problema que estou tendo. Meu sistema acessa uma pasta compartilhada no servidor, ex.: \\\\servidor\\pastasistema$\\, acontece que essa pasta tem senha e usuário para acessar. Gostaria de saber como que faço para meu sistema se conectar, deixaria uma senha e senha salva dentro do sistema e assim não importa que esteja conectado no PC meu sistema teria acesso a essa pasta e o usuário pelo windows, fora do sistema, ainda não teria acesso. Desde já agradeço a ajuda de todos.
up!!!! alguém para ajudar?
GOSTEI 0
Natanael Ferreira
25/05/2021
Precisei disso e custei a resolver.
Você precisar fazer um mapeamento oculto (sem letra de unidade).
O programa terá acesso a pasta mas não ficará visível como unidade de rede no Windows.
Testa aí.
Exemplo de chamada da procedure:
Você precisar fazer um mapeamento oculto (sem letra de unidade).
O programa terá acesso a pasta mas não ficará visível como unidade de rede no Windows.
Testa aí.
procedure MapearUnidadeRedeOculta(pasta, usuário, senha: string);
var
NRW: _NETRESOURCEW;
dwResult: DWORD;
S: string;
begin
with NRW do
begin
dwType := RESOURCETYPE_DISK;
lpLocalName := nil; // não adiciona letra (oculta a unidade no windows)
lpRemoteName := PCHAR(pasta); // caminho para ser mapeado
lpProvider := nil;
end;
case WNetAddConnection2(NRW, PCHAR(senha), PCHAR(usuario), CONNECT_UPDATE_PROFILE) of
NO_ERROR:
S := EmptyStr;
ERROR_ACCESS_DENIED:
S := 'O acesso ao recurso de rede foi negado.';
ERROR_ALREADY_ASSIGNED:
S := 'O dispositivo local especificado por lpLocalName já está conectado a um recurso de rede.';
ERROR_BAD_DEV_TYPE:
S := 'O tipo de dispositivo local e o tipo de recurso de rede não correspondem.';
ERROR_BAD_DEVICE:
S := 'O valor especificado por lpLocalName é inválido.';
ERROR_BAD_NET_NAME:
S := 'O valor especificado por lpRemoteName não é aceitável para nenhum provedor de recursos de rede. O nome do recurso é inválido ou o recurso nomeado não pode ser localizado.';
ERROR_BAD_PROFILE:
S := 'O perfil do usuário está em um formato incorreto.';
ERROR_BAD_PROVIDER:
S := 'O valor especificado por lpProvider não corresponde a nenhum provedor.';
ERROR_BUSY:
S := 'O roteador ou provedor está ocupado, possivelmente inicializando. O chamador deve tentar novamente.';
ERROR_CANCELLED:
S := 'A tentativa de fazer a conexão foi cancelada pelo usuário por meio de uma caixa de diálogo de um dos provedores de recursos de rede ou por um recurso chamado.';
ERROR_CANNOT_OPEN_PROFILE:
S := 'O sistema não pode abrir o perfil do usuário para processar conexões persistentes.';
ERROR_DEVICE_ALREADY_REMEMBERED:
S := 'Uma entrada para o dispositivo especificado em lpLocalName já está no perfil do usuário.';
ERROR_EXTENDED_ERROR:
S := 'Ocorreu um erro específico da rede. Chame a função WNetGetLastError para obter uma descrição do erro.';
ERROR_INVALID_PASSWORD:
S := 'A senha especificada é inválida.';
ERROR_NO_NET_OR_BAD_PATH:
S := 'Um componente de rede não foi iniciado ou o nome especificado não pôde ser tratado.';
ERROR_NO_NETWORK:
S := 'Não há rede presente.';
ERROR_SESSION_CREDENTIAL_CONFLICT:
S := 'Conflito de credencial na sessão.'
else
S := Concat('Erro desconhecido: ', dwResult.ToString());
end;
if S <> EmptyStr then
MessageDlg(S, mtError, [mbOk], 0);
end;Exemplo de chamada da procedure:
MapearUnidadeRedeOculta('\\\\servidor\\pastasistema$\\', 'meuUsuario', 'minhaSenha');GOSTEI 0
Anderson Ferreira
25/05/2021
Precisei disso e custei a resolver.
Você precisar fazer um mapeamento oculto (sem letra de unidade).
O programa terá acesso a pasta mas não ficará visível como unidade de rede no Windows.
Testa aí.
Exemplo de chamada da procedure:
Você precisar fazer um mapeamento oculto (sem letra de unidade).
O programa terá acesso a pasta mas não ficará visível como unidade de rede no Windows.
Testa aí.
procedure MapearUnidadeRedeOculta(pasta, usuário, senha: string);
var
NRW: _NETRESOURCEW;
dwResult: DWORD;
S: string;
begin
with NRW do
begin
dwType := RESOURCETYPE_DISK;
lpLocalName := nil; // não adiciona letra (oculta a unidade no windows)
lpRemoteName := PCHAR(pasta); // caminho para ser mapeado
lpProvider := nil;
end;
case WNetAddConnection2(NRW, PCHAR(senha), PCHAR(usuario), CONNECT_UPDATE_PROFILE) of
NO_ERROR:
S := EmptyStr;
ERROR_ACCESS_DENIED:
S := 'O acesso ao recurso de rede foi negado.';
ERROR_ALREADY_ASSIGNED:
S := 'O dispositivo local especificado por lpLocalName já está conectado a um recurso de rede.';
ERROR_BAD_DEV_TYPE:
S := 'O tipo de dispositivo local e o tipo de recurso de rede não correspondem.';
ERROR_BAD_DEVICE:
S := 'O valor especificado por lpLocalName é inválido.';
ERROR_BAD_NET_NAME:
S := 'O valor especificado por lpRemoteName não é aceitável para nenhum provedor de recursos de rede. O nome do recurso é inválido ou o recurso nomeado não pode ser localizado.';
ERROR_BAD_PROFILE:
S := 'O perfil do usuário está em um formato incorreto.';
ERROR_BAD_PROVIDER:
S := 'O valor especificado por lpProvider não corresponde a nenhum provedor.';
ERROR_BUSY:
S := 'O roteador ou provedor está ocupado, possivelmente inicializando. O chamador deve tentar novamente.';
ERROR_CANCELLED:
S := 'A tentativa de fazer a conexão foi cancelada pelo usuário por meio de uma caixa de diálogo de um dos provedores de recursos de rede ou por um recurso chamado.';
ERROR_CANNOT_OPEN_PROFILE:
S := 'O sistema não pode abrir o perfil do usuário para processar conexões persistentes.';
ERROR_DEVICE_ALREADY_REMEMBERED:
S := 'Uma entrada para o dispositivo especificado em lpLocalName já está no perfil do usuário.';
ERROR_EXTENDED_ERROR:
S := 'Ocorreu um erro específico da rede. Chame a função WNetGetLastError para obter uma descrição do erro.';
ERROR_INVALID_PASSWORD:
S := 'A senha especificada é inválida.';
ERROR_NO_NET_OR_BAD_PATH:
S := 'Um componente de rede não foi iniciado ou o nome especificado não pôde ser tratado.';
ERROR_NO_NETWORK:
S := 'Não há rede presente.';
ERROR_SESSION_CREDENTIAL_CONFLICT:
S := 'Conflito de credencial na sessão.'
else
S := Concat('Erro desconhecido: ', dwResult.ToString());
end;
if S <> EmptyStr then
MessageDlg(S, mtError, [mbOk], 0);
end;Exemplo de chamada da procedure:
MapearUnidadeRedeOculta('\\\\\\\\servidor\\\\pastasistema$\\\\', 'meuUsuario', 'minhaSenha');obrigado pela ajuda, mas está danod o erro: Conflito de credencial na sessão.
Pq será?
GOSTEI 0
Natanael Ferreira
25/05/2021
Nunca tive este erro mas pesquisando encontrei que este erro ocorre quando já tem uma conexão com este recurso já conectado.
Nesta conexão você usou outro nome de usuário e depois o que você usa agora.
Para resolver você deve usar o mesmo nome de usuário usado com a conexão anterior, ou você desconecta a primeira conexão.
Veja alguns links (em inglês):
http://www.delphigroups.info/2/38/502366.html
http://www.delphigroups.info/2/87/473919.html
Nesta conexão você usou outro nome de usuário e depois o que você usa agora.
Para resolver você deve usar o mesmo nome de usuário usado com a conexão anterior, ou você desconecta a primeira conexão.
Veja alguns links (em inglês):
http://www.delphigroups.info/2/38/502366.html
http://www.delphigroups.info/2/87/473919.html
GOSTEI 0