Acceder a un archivo en una unidad de red
Antecedentes: Tengo una aplicación que tiene que leer los archivos en una unidad de red (Z :)
Esto funciona muy bien en el dominio de mi oficina, sin embargo, no funciona en el sitio (en un dominio diferente). Por lo que puedo decir, los usuarios del dominio y las unidades de red están configurados de la misma manera, sin embargo, no tengo acceso a los usuarios, etc. en el dominio de los clientes.
Cuando no pude acceder a la unidad de red, pensé que necesitaba un token para un usuario. Así es como suplanto al usuario:
[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();
}
Ahora aquí está la parte interesante / extraña. En mi red, la aplicación ya puede acceder a la unidad de red, y si trato de suplantar al usuario activo (exactamente el mismo usuario, incluido el mismo dominio) no podrá acceder a la unidad de red.
Esto me deja indefenso ya que ahora no tengo idea de qué funciona y qué no funciona, y más aún, ¿funcionará en el sitio?
¿Qué me estoy perdiendo?
EDITAR: Olvidé escribir esto mientras originalmente hacía la pregunta: intenté ingresar un nombre de dominio válido y no funcionó, así que luego intenté ingresar nulo para obtener el mismo nombre de usuario que sin este código (ya que funciona de forma predeterminada en nuestro dominio). Esto no ayudó, y así es como dominio = nulo; Terminé en esta pregunta.