Detectar enlaces simbólicos, puntos de unión, puntos de assembly y enlaces duros

¿Alguien sabe cómo verificar si un archivo o directorio es un enlace simbólico , un punto de unión , un punto de assembly o un enlace duro ?

Por lo que sé, los enlaces simbólicos se detectan al verificar un archivo por su atributo “ReparsePoint”. Los puntos de unión se detectan al verificar un directorio para el atributo “ReparsePoint”. Entonces, si el atributo “ReparsePoint” se establece en un archivo, debe ser un enlace simbólico, de lo contrario, si se establece en un directorio, solo puede ser un punto de unión … ¿verdad?

Bueno hasta ahora, pero todavía no tengo idea de cómo detectar “Puntos de assembly” y “Enlaces duros”. ¿Puede alguien decirme cómo hacer esto?

Los enlaces simbólicos, los puntos de unión y los puntos de assembly son ejemplos de diferentes puntos de repetición. Los enlaces duros, sin embargo, son solo archivos regulares. En NTFS todos los archivos son enlaces duros. Puede detectar que un archivo tiene varios enlaces duros que lo apuntan, pero no hay un “archivo real” al que apunta. Puede pensar en los enlaces duros como nombres diferentes para el mismo archivo.

Aquí hay información sobre cómo acceder a los puntos de análisis de C #: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

Aquí hay información sobre cómo hacerlo en C: http://blog.kalmbach-software.de/2008/02/

Enlaces duros:

Puede detectar si varios nombres apuntan a la misma “porción de datos” o “contenido del archivo” invocando la función de la API Win32 GetFileInformationByHandle . El miembro nNumberOfLinks de la estructura BY_HANDLE_FILE_INFORMATION devuelta contiene el número total de enlaces

Puntos de assembly:

Puede recorrer todos los puntos de assembly en un volumen con FindFirstVolumeMountPoint y FindNextVolumeMountPoint . También se debe usar FindVolumeMountPointClose para cerrar el identificador de búsqueda.

Desde .NET

Hacer esto desde .NET requerirá algo de magia P / Invoke

Por favor vea mi pregunta Uniones NTFS, problemas para entender la API . Es una especie de duplicado de la pregunta. Pero explico todo sobre cómo se implementan los puntos de reparse, los puntos de assembly, las uniones y los enlaces simbólicos, utilizando C / C ++. En lugar de simplemente dar enlaces a la API, a ciegas …