Acessando um arquivo em uma unidade de rede
Fundo: Eu tenho um aplicativo que precisa ler arquivos em uma unidade de rede (Z :)
Isso funciona muito bem no domínio do meu escritório, mas não funciona no site (em um domínio diferente). Tanto quanto posso dizer, os usuários do domínio e as unidades de rede estão definidos da mesma maneira, no entanto, não tenho acesso aos usuários etc. no domínio do cliente.
Quando não consegui acessar a unidade de rede, achei que precisava de um token para um usuário. É assim que eu imerso no usuário:
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
...
const string userName = "USER";
const string pass = "PASS";
const string domainName = "VALIDDOMAIN.local" //tried with valid domain name and with null, same result
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
IntPtr tokenHandle = new IntPtr(0);
bool returnValue = LogonUser(userName, domainName, pass,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
ref tokenHandle);
if (!returnValue)
throw new Exception("Logon failed.");
WindowsImpersonationContext impersonatedUser = null;
try
{
WindowsIdentity wid = new WindowsIdentity(tokenHandle);
impersonatedUser = wid.Impersonate();
}
finally
{
if (impersonatedUser != null) impersonatedUser.Undo();
}
Agora, aqui está a parte interessante / estranha. Na minha rede, o aplicativo já pode acessar a unidade de rede e, se eu tentar representar o usuário ativo (exatamente o mesmo usuário, incluindo o mesmo domínio), ele não poderá acessar a unidade de rede.
Isso me deixa impotente, já que agora não tenho idéia do que funciona e do que não funciona, e mais ao ponto, funcionará no local?
o que estou perdendo?
EDITAR: Esqueci-me de escrever isso enquanto fazia a pergunta: tentei inserir um nome de domínio válido e não funcionou. Depois disso, tentei inserir nulo para obter o mesmo nome de usuário que faria sem esse código (já que funciona por padrão em nosso domínio). Isso não ajudou, e é assim que domain = null; acabou nesta pergunta.