Fórum Pasta compartilhada e com permissão #615843
25/05/2021
0
Anderson Ferreira
Curtir tópico
+ 0Posts
16/06/2021
Anderson Ferreira
up!!!! alguém para ajudar?
Gostei + 0
17/06/2021
Natanael Ferreira
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
17/06/2021
Anderson Ferreira
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
17/06/2021
Natanael Ferreira
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
Clique aqui para fazer login e interagir na Comunidade :)