Compartir a través de


La copia de archivos desde una unidad asignada a un directorio local produce un error (la ubicación no está disponible) si UAC está habilitado

En este artículo se resuelve el error Location is not available when you try to copy files from a mapped drive.

Número de KB original: 2019185

Síntomas

Con el Control de cuentas de usuario (UAC) habilitado, puede recibir el siguiente error al intentar copiar un archivo de una unidad asignada a un directorio local:

La ubicación no está disponible
<letra de unidad> asignada\ hace referencia a una ubicación que no está disponible. Podría estar en un disco duro de este equipo o en una red. Compruebe que el disco está insertado correctamente o que está conectado a Internet o a la red y vuelva a intentarlo. Si todavía no se encuentra, es posible que la información se haya movido a otra ubicación.

Causa

La causa subyacente es UAC y la interacción con el token dividido. Cuando un administrador inicia sesión en un equipo con el modo de aprobación de administrador (AAM) habilitado, se concede al usuario dos tokens de acceso:

  • un token de acceso de administrador completo
  • un token de acceso de usuario estándar filtrado

De forma predeterminada, cuando un miembro del grupo administradores local inicia sesión, se deshabilitan los privilegios administrativos de Windows y se quitan los derechos de usuario elevados. Da como resultado el token de acceso de usuario estándar. A continuación, el token de acceso de usuario estándar se usa para iniciar el escritorio (Explorer.exe). Explorer.exe es el proceso primario del que todos los demás procesos iniciados por el usuario heredan el token de acceso. Como resultado, todas las aplicaciones se ejecutan como un usuario estándar de forma predeterminada, a menos que un usuario proporcione consentimiento o credenciales para aprobar una aplicación para usar un token de acceso administrativo completo. A diferencia de este proceso, cuando un usuario estándar inicia sesión, solo se crea un token de acceso de usuario estándar. Este token de acceso de usuario estándar se usa para iniciar el escritorio.

Las condiciones siguientes deben estar en vigor para que se produzca el error:

  1. UAC está habilitado con AAM.
  2. El usuario no ha iniciado sesión como administrador del equipo local ni con credenciales de cuenta de administrador de dominio.
  3. Una unidad se asigna mediante el contexto de seguridad de usuario estándar.
  4. Los usuarios no tienen permisos NTFS de creación o escritura en el directorio de destino.

El usuario ha asignado una unidad mediante la opción Asignar unidad de red en el Explorador de Windows o ejecutando el comando en un símbolo del net use sistema sin privilegios elevados. Las unidades asignadas se pueden ver mediante la ejecución de net use como usuario estándar desde un símbolo del sistema sin privilegios elevados. En este caso, la unidad se asignó como un usuario estándar.

C:\Users\johnsmith>net use
New connections will be remembered.
Status      Local     Remote                    Network
-------------------------------------------------------------------------------
OK          X: [\\contoso-dc1\d$](file://contoso-dc1/d$)               Microsoft Windows Network
The command completed successfully.

Al ejecutar el mismo comando en un símbolo del sistema con privilegios elevados, no aparece ninguna unidad asignada.

C:\Windows\system32>net use
New connections will be remembered.
There are no entries in the list.

Muestra claramente que la sesión con privilegios elevados no ve la unidad asignada del usuario estándar. Por lo tanto, no puede completar la operación de copia. Este comportamiento es por diseño.

Nota:

De forma predeterminada, AAM está habilitado para las cuentas que son miembros del grupo administradores local. La configuración se puede encontrar en el nodo Opciones de seguridad de la directiva local, en Configuración de seguridad y se puede configurar con el Editor de directivas de grupo local (secpol.msc) y con la Consola de administración de directivas de grupo (GPMC) (gpedit.msc). Para obtener más información sobre UAC, consulte Control de cuentas de usuario.

Solución

  1. Asigne la unidad mediante un proceso con privilegios elevados. Pero el Explorador de Windows no verá la asignación de unidades con privilegios elevados. Para obtener más información, consulte la sección Más información .

    Dentro del control de cuentas de usuario de Windows 7

  2. Use una ruta de acceso UNC para conectarse a los recursos de red, por ejemplo, \\server\share.

  3. Use preferencias de directiva de grupo para asignar unidades. Las notas del producto a las que se hace referencia a continuación presentan las preferencias de directiva de grupo, que es una nueva característica de Windows Server 2008. En las notas del producto se describe cómo puede usar preferencias de directiva de grupo para implementar y administrar mejor la configuración del sistema operativo y de la aplicación. Las preferencias de directiva de grupo permiten configurar, implementar y administrar la configuración del sistema operativo y de la aplicación que anteriormente no podía administrar mediante la directiva de grupo. Algunos ejemplos son las unidades asignadas, las tareas programadas y la configuración de menú Inicio. Para muchos tipos de configuración del sistema operativo y de la aplicación, el uso de preferencias de directiva de grupo es una alternativa mejor para configurarlos en imágenes de Windows o mediante scripts de inicio de sesión.

    Información general sobre las preferencias de directiva de grupo

  4. Asigne unidades con un script de inicio de sesión que use el script launchapp.wsf para programar los comandos mediante el programador de tareas. El documento siguiente le ayuda a ordenar por las características nuevas y actualizadas disponibles en Windows Vista. También proporciona muchos procedimientos recomendados para ayudarle a implementar la directiva de grupo.

    Implementación de la directiva de grupo mediante Windows Vista

  5. En el siguiente artículo se describe un método no admitido que revierte el cambio de seguridad descrito anteriormente mediante la configuración del valor del EnableLinkedConnections Registro. Este valor permite a Windows Vista compartir conexiones de red entre el token de acceso filtrado y el token de acceso de administrador completo para un miembro del grupo Administradores. Después de configurar este valor del Registro, LSA comprueba si otro token de acceso está asociado a la sesión de usuario actual si se asigna un recurso de red a un token de acceso. Si LSA determina que hay un token de acceso vinculado, agrega el recurso compartido de red a la ubicación vinculada.

    Es posible que los programas no puedan acceder a algunas ubicaciones de red después de activar el Control de cuentas de usuario en Windows Vista o en sistemas operativos más recientes.

Más información

Cuando el usuario administrativo inicia sesión, Windows procesa los scripts de inicio de sesión mediante el token con privilegios elevados. El script realmente funciona y asigna la unidad. Sin embargo, Windows bloquea la vista de las unidades de red asignadas porque el escritorio usa el token filtrado mientras las unidades se asignaban mediante el token con privilegios elevados (administrador completo).

Antes de Windows 2000 SP2, los nombres de dispositivo (por ejemplo, unidades asignadas) permanecen visibles globalmente hasta que se quitan explícitamente o se reinicia el sistema. Por motivos de seguridad, hemos modificado este comportamiento a partir de Windows 2000 SP2. Desde este punto de adelante, todos los dispositivos están asociados a un identificador de autenticación (LUID). LUID es un identificador generado para cada sesión de inicio de sesión. Un proceso que se ejecuta en el contexto localSystem puede crear un nombre de dispositivo en el espacio de nombres global del dispositivo, aunque los objetos de espacio de nombres locales pueden ocultar objetos de espacio de nombres globales.

Estas unidades asignadas están asociadas a LUID. Y las aplicaciones con privilegios elevados usan un LUID diferente generado durante un evento de inicio de sesión independiente. Por lo tanto, la aplicación con privilegios elevados ya no verá ninguna unidad asignada para este usuario. Observará el mismo comportamiento anteriormente mediante RunAs o la CreateProcessAsUser API, pero UAC aumenta drásticamente el número de usuarios que usarán estos conceptos.

El resultado es que si eleva un símbolo del sistema, ya no verá ninguna unidad asignada del espacio de nombres local creado a partir del inicio de sesión original (ya sea creado a través de un script de inicio de sesión, mediante la WNetAddConnection API o de otro modo). Hay una mitigación en vigor para el escenario de inicio desde el Explorador de Windows. Si hace doble clic en un archivo ejecutable que se detecta como un archivo de instalación o se manifiesta como requireAdministrator, Windows puede detectar que se ha elevado y que hay un error que indica que no se encontró la ruta de acceso y copiar esa asignación de unidad desde el LUID original. Sin embargo, es el único escenario automatizado.