Bom dia Senhores,
Tenho o seguinte problema descrito logo abaixo e gostaria de sabe se consigo alguma ajuda quanto a isto.
Caso corrente:
Minha aplicação deve buscar alguns arquivos em rede.
1. Tentativa de login no compartilhamento com usuário e senha vazios ("")
2. Se a primeira tentativa não tiver sucesso, fazer tentativa de login no compartilhamento com usuário e senha salvo em registro.
3. Tentar copiar os arquivos.
Novo Caso:
1. Tentativa de login no compartilhamento com usuário e senha vazios ("")
2. Se a primeira tentativa não tiver sucesso, fazer tentativa de login impersonado usuário logado atualmente.
2. Se a segunda tentativa não tiver sucesso, fazer tentativa de login no compartilhamento com usuario e senha salvo em registro.
3. Tenta copiar os arquivos.
As tentativas de acesso ao compartilhamento remoto. Eu faço utilizando a função WNetUseConnection, sendo que para tentar acessar com usuário logado atualmente impersonado, uso primeiro a função ImpersonateLoggedOnUser e depois a WNetUseConnection com as informações de usuário e senha com NULL.
Após tentar fazer o login impersonado no compartilhamento, caso o usuário não tenha permissões suficientes, ele não retorna NO_ERROR e no fim não consigo copiar os arquivos. Tudo bem, mesmo não me retornando a mensagem de erro isto é válido e é um comportamento que posso contornar fazendo uma validação tentando acessar o compartilhamento.
Resolvi então colocar uma forma de validar meu acesso ao compartilhamento para assim saber qual caminho devo tomar. Tudo parecia ir bem até que resolvi dar permissões ao usuário logado no compartilhamento remoto para conseguir copiar os arquivos. Ao fazer o login, ele retorna NO_ERROR, porém coloquei como função de validação um FindFirstFile, mas o retorno da função é um INVALID_HANDLE_VALUE, o que diz que não consigo ver arquivo algum dentro do compartilhamento, porém no momento de fazer a copia dos arquivos, os arquivos são copiados normalmente.
Conclusão.
Não sei se isto é um BUG ou se estou fazendo a verificação de acesso ao compartilhamento de forma errada. Gostaria muito de receber alguma ajuda se possível, pois gostaria que o funcionamento da aplicação fosse consistente. O que estou desenvolvendo é um Windows Service, logo o usuário padrão com o qual ele é rodado é o SYSTEM e por isto preciso sempre impersoná-lo para outros usuários para conseguir acesso aos compartilhamentos. Estou recorrendo ao grupo, pois não encontrei nenhuma informação consistente na internet.
Obrigado senhores... fico no aguardo...