El error de espacio en disco o memoria insuficiente al abrir un archivo de Office en Win8, los ADS, Process Monitor y su solución

Hace unos días, visitando un cliente aquí en Colombia, me encontré con un problema muy interesante y que al parecer es más común de lo que imaginaba; como afortunadamente lo pude documentar y reproducir, quiero compartirlo aquí para los que en un futuro entren buscando alguna respuesta al inconveniente.

*Nota: En la parte de “La causa”, tocaré algunas cosas referentes a Windows Internals, así que si me equivoco en algo, agradezco lo comenten para corregirlo. =)

El problema

El cliente recién se encuentra en renovación de equipos, así que es normal que le venga con Windows 8, adicional a esto, están haciendo migración de toda la suite Office 2007 a la 2013, por lo que algunos de estos equipos se les estaba actualizando la versión.

El problema empezó a suceder cuando en varios de estos equipos, después de hacer la actualización a Office 2013 y luego de intentar abrir un archivo de Excel, aparecía un mensaje similar a este:

Captura

Español:
Microsoft Excel no puede abrir o guardar más documentos porque el espacio en disco o la memoria son insuficientes:

– Para disponer de más memoria, cierre los libros o programas que no necesite.
– Para liberar espacio en disco, elimine los archivos que no necesita del disco en el que desea guardar los documentos.

Inglés:
Microsoft Excel cannot open or save any more documents because there is not enough available memory or disk space:

– To make more memory available, close workbooks or programs you no longer need.
– To free disk space, delete files you no longer need from the disk you are saving to.

Al hacer clic en Aceptar (OK), Excel quedaba abierto pero el documento no se podía ver de ninguna forma. Lo más extraño, es que este mismo documento funcionaba en otros equipos con Office 2007 o incluso con Office 2013.

Por supuesto, la primera reacción del cliente fue revisar temas de espacio y memoria, pero a parte de que no había nada fuera de lo normal, la operación de abrir una simple hoja de cálculo no puede consumir tantos recuros como para que Windows impida su acceso. Como no encontraba solución, procedía a realizar downgrade de Office con el objetivo de evitar el mensaje de error.

*Nota: El mensaje de error en Word u otras aplicaciones de Office no es igual, pero es muy similar al hacer referencia a la falta de recursos.

La causa

Como no tenía la más remota idea del porqué salía este mensaje de error, aún con suficientes recursos e incluso moviéndolo en distintas carpetas, procedí a llamar a la herramienta por excelencia: Process Monitor de Sysinternals.

La idea como siempre, era ejecutar Process Monitor, abrir el archivo, esperar hasta que el mensaje de error saliera, cerrarlo y parar el monitoreo para empezar a buscar entre los miles de resultados, cuál podría darme alguna pista del problema.

Después de un buen rato de análisis (normal cuando no sabes qué buscas), Process Monitor me dio la pista más grande para encontrar la causa del extraño mensaje; siguiendo específicamente al proceso de EXCEL.exe, me encontré con esto:

ZI1

*Nota: Pueden hacer clic en la imagen para verla en su tamaño real.

Como ven en la captura encerrada por rojo, Excel estaba realizando una operación referenciada por Process Monitor como CreateFile, que programación se utiliza normalmente para crear o abrir diferentes tipos de archivos; al final del archivo .xls aparecía algo sumamente interesante y asociado al nombre: Zone.Identifier y la operación era SUCCESS.

Hasta ese momento que noté estas operaciones por primera vez, no tenía la más remota idea acerca de qué se trataba, pero tal vez la intución me llevó a desconfiar de tantas operaciones relacionadas, sobre todo por los tipos, es decir, CreateFile, QueryBasicInfo, Close, LockFile, etc. Además de esto, y lo que en definitiva sería la causa, era la extraña terminación en el nombre de Zone.Identifier así que decidí parar e investigar un poco más.

Zone.Identifier, hace parte de un grupo de atributos NTFS conocidos como Alternative Data Stream (ADS), y que básicamente alojan un flujo de información o datos alternos sobre el archivo.

Los archivos NTFS tienen varios atributos, pero uno de ellos es donde nosotros almacenamos la información cuando escribimos en él, y se conoce como $DATA.

Utilizando Streams de Sysinternals, o mejor aun, Windows PowerShell, puedo ver esto con ayuda del cmdlet Get-Item; por ejemplo, si tengo un archivo en el escritorio llamado ADS.txt, y deseo consultar sus atributos, el comando sería:

Get-Item –Path C:UsersChechoDesktopADS.txt –Streams *

image

Así mismo, podríamos ver su contenido utilizando Get-Content de una forma similar:

Get-Content –Path C:UsersChechoDesktopADS.txt –Stream $DATA

image

*Nota: Para archivos de Office la visualización no es tan simple como en un TXT, así que verán muchos caracteres extraños de una forma desorganizada.

Ahora, los ADS pueden contenter información adicional, como ya lo mencioné al principio; el ADS de Zone.Identifier lo crea Internet Explorer a cada archivo descargado para referenciar en su stream la zona desde la que se descargó. La siguiente tabla muestra todas las zonas existentes:

Valor Configuración
0 Mi Equipo
1 Zona de Intranet local
2 Zona de sitios de confianza
3 Zona de internet
4 Zona de sitios restringidos

Fuente: Ask The Core Team blog.

Desde PowerShell, podemos consultar el identificador con el cmdlet Get-Content también:

image

Estas Zonas las hemos visto alguna vez en nuestras vidas en las Opciones de Internet, pestaña de Seguridad:

image

El nombre completo del archivo entonces finaliza con los respectivos ADS, por ejemplo: Demo.xls:Zone.Identifier.

Como estos ADS no se pueden ver con solo abrir el archivo, es normal que no se muestren y por ende, que generen este tipo de confusión.

Volviendo al problema…

Excel 2013, en su comportamiento natural, es capaz de mostrar el contenido pero abriéndolo en Vista Protegida (Nuevo para Office 2013), con el fin de indicar al usuario que se descargó desde internet:

image

En el caso del cliente, debido a la actualización desde Office 2010 hacia Office 2013, Excel no es capaz de gestionar correctamente lo que parece una excepción y lanza un este error genérico útil solo para entrar en una confusión grande. ¿Se le podría llamar Bug? No lo sé.

La solución

La forma más sencilla y rápida de solucionar este problema, una vez se presente por causa de la actualización, es realizar lo siguiente:

1. Cerrar completamente el archivo.

2. Hacer clic derecho sobre él y seleccionar Propiedades.

En la ventana de Propiedades verán en la parte inferior un botón adicional que dice: Desbloquear:

image

3. Hacer clic en el botón Desbloquear, Aplicar y Aceptar.

Una vez hecho esto, el archivo se podrá abrir sin ningún tipo de problemas nuevamente y los ADS quedarán borrados.

Opcional: Directivas de grupo para Zone.Identifier

Existe una Directiva de Grupo para evistar que Windows conserver el ADS de Zone.Identifier establecido por Internet Explorer al realizar la descarga, para habilitarlo desde el Controlador de Dominio, deben abrir el Administrador de Directivas de Grupo y navegar hasta:

Configuración de UsuarioPolíticasPlantillas AdministrativasComponentes de WindowsAdministrador de datos adjuntos

Doble clic en la plantilla:
No conservar la información de zona en los datos adjuntos de archivo

image

De esta forma, el ADS de Zone.Identifier no se mantendrá nunca y evitarán este problema, además de obtener un poco más de seguridad, sobre todo en equipos en los que se actualizó desde Office 2010 o versiones anteriores a 2013.

Espero sea de utilidad.

Saludos,

Checho

2 comentarios en “El error de espacio en disco o memoria insuficiente al abrir un archivo de Office en Win8, los ADS, Process Monitor y su solución

  1. Gracias hermano, llevo varios días investigando como resolver este problema y ni los estupidos trabajadores de microsoft son capaces de dar una solución clara como la tuya.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *