¿Qué sucede internamente cuando una ruta de archivo supera aprox. 32767 caracteres en Windows?

En Windows (a partir de 2000), la ruta de un archivo puede tener una longitud máxima de aproximadamente 32767 caracteres. Esta limitación existe debido al manejo interno conUNICODE_STRING en la API nativa (también en el lado del kernel, en los controladores, etc.). Hasta ahora tan bueno. Conozco la teoría detrás de esa parte.

La razón del límite es que elLength yMaximumLength miembros deUNICODE_STRING contar el número de bytes en elBuffer, pero son enteros sin signo de 16 bits en sí mismos.

También sé por qué el límite es una aproximación en lugar de un límite establecido. Esto se debe principalmente a cómo su nombre de archivo (por ejemplo,\\.\C:\boot.ini) se resuelve a su forma nativa (por ejemplo,\??\C:\boot.ini) y luego a algo que es prefijado por elreal nombre del dispositivo de volumen y luego seguido por la ruta relativa a ese volumen, p. ej.\Device\HarddiskVolume2\boot.ini.

Además, desde el Explorador de Windows el síntoma conocido al golpear el ("ANSI")MAX_PATH El límite es pretender que el archivo o la carpeta no existe en algunas versiones de Windows (es posible que esto se haya solucionado en algún momento).

Pero, ¿qué sucede a nivel de administrador de objetos, administrador de E / S y controlador de sistema de archivos respectivamente? cuando llamoCreateFile() con un camino que parece\\.\C:\...\filename.ext y todo el camino haceno excede el limite, peroalcanza en mi llamado akernel32.dllesCreateFile() yentonces se expande? ...

Ni los SDK ni los WDK parecen ser particularmente conversadores sobre el tema. ¿O busqué en las secciones equivocadas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta