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);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta