2017-01-13

Windows es simultáneamente fabuloso y horripilante

Como parte de mi trabajo, tengo que trabajar con drivers de Windows; en particular con minifilters. Ayer, mientras estaba tratando de entender cómo anda un minifilter volví a cruzarme con el método FltGetTunneledName mientras navegaba por el API disponible para los minifilters. Cómo no entendía qué catzo es un "tunneled name", googlié un poco y encontré ésta explicación del 2005 en un blog de Microsoft.
Originalmente en DOS, los nombres de archivos tenían hasta 8 caracteres, un punto y 3 caracteres de extensión. Cuando hicieron Windows NT decidieron que querían tener nombres de archivo más copados (parecidos a los de UNIX) y extendieron significativamente el largo posible para los nombres de archivo. El tema es que muchos programas solo sabían manejar nombres cortos. Entonces, para que sigan andando, hicieron que los archivos tuvieran un nombre largo (que es el que realmente querríamos) y uno corto para que estos programas lo usen. También agregaron otras cosas como que los archivos tienen asociada su fecha de creación (información que no estaba disponible en DOS).
El tema es que muchos programas (ej: editores de texto) para grabar un cambio en un archivo (ej: toto.doc) y tener backup de la versión anterior lo que hacen es renombrar el archivo a otro nombre (ej: toto.bak) y después escriben otro archivo con el nombre original. Y hay un problema; si operás solo con los nombres cortos y hacés eso se pierde el nombre largo. Entonces en MS tuvieron la idea de tener un cache de asociaciones de nombres cortos y largos y si creás de nuevo un archivo con un nombre corto que ya usaste le asocia el nombre largo correspondiente (y también su fecha de creación).
Desde el punto de vista del usuario del sistema es fabuloso, ya que un montón de programas que andarían sutilmente mal gracias a este parche andan bien. Pero cuando estás escribiendo drivers de filesystem en el kernel y tenés que lidiar con la complejidad adicional que esto implica, es horripilante.

PD: Acá agrego un artículo que explica con bastante detalle el quilombo agregado por esto a los minifilters.

No hay comentarios.: