No se puede escribir en una unidad asignada utilizando la suplantación
Básicamente estoy corriendo el mismo problema que esta publicaciónAcceso a unidades mapeadas cuando se hace pasar por ASP.NET
Estoy trabajando en un sitio web heredado y necesito permitir que los administradores cambien el logotipo del sitio, los banners, etc., de un archivo de imagen en sus escritorios a una unidad asignada en el servidor.
Por lo tanto, su sitio web utiliza la suplantación cada vez que necesita guardar en el disco, y funciona bien; Sin embargo, no puedo hacer que funcione en su entorno de prueba ni en mi entorno de prueba.
¿Algunas ideas? He verificado dos veces el usuario y la contraseña (el código no especifica el dominio) y ese no es el problema.
Aquí hay un extracto del código que maneja la suplantación:
public bool ImpersonateUser(String user, String password, String domain)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (RevertToSelf())
{
if (LogonUserA(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
//... rest of the code
Y una prueba -sanitizada-:
if (impUtility.ImpersonateUser("user", "password", string.Empty))
{
fu.SaveAs(@"C:\Images\" + imgName);
}