es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo convertir un vínculo rígido en un vínculo simbólico con la API Win32?

Breve antecedente a esta pregunta, ya que sé que levantará algunas cejas: Estoy desarrollando una herramienta de línea de comandos en C para hacer copias de seguridad y estoy implementando copias de seguridad incrementales utilizando vínculos duros NTFS. Por lo tanto, si existen vínculos simbólicos en una copia de seguridad anterior, debo poder apuntar a los propios vínculos simbólicos, no al destino.

Desafortunadamente, la página de CreateHardLink indica claramente:

Comportamiento del vínculo simbólico: si el camino apunta a un vínculo simbólico, la función crea un vínculo duro al destino.

Ahora estoy atascado preguntándome ¿cuál es la solución a esto? ¿Cómo puedo crear un vínculo duro que apunte al propio vínculo simbólico en lugar del destino? Me di cuenta de que el comando interno de Windows, MKLINK, parece ser capaz de crear vínculos duros a vínculos simbólicos. Entonces teóricamente, supongo que podría usar la función del sistema en C, pero para ser honesto, se siente como trampa y trato de evitarlo. ¿Existe posiblemente una solución utilizando solo la API de Win32?

También encontré algunos fragmentos de código de un desarrollador de Google (1) (2), con algunos detalles sobre la implementación de CreateHardLink y demás, pero me pareció un poco demasiado bajo nivel para hacer mucho sentido de ello. Además, (y podría equivocarme en esto), las funciones proporcionadas en el repositorio de GitHub parecen ser solo compatibles con Windows 10 y posteriores, pero esperaría al menos soportar Windows 7 también.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hardlink a Enlace Simbólico en NTFS

    Como experto en IT especializado en C, WinAPI, sistemas de archivos, enlaces simbólicos y NTFS, comprendo el desafío de crear un vínculo rígido a un enlace simbólico en sí mismo en NTFS. Mientras que la función CreateHardLink en WinAPI crea un vínculo rígido al objetivo si la ruta apunta a un enlace simbólico, no crea un vínculo rígido al enlace simbólico en sí.

    Una posible solución a este problema es usar el comando MKLINK, que es un comando incorporado en Windows que puede crear vínculos rígidos a enlaces simbólicos. Sin embargo, esta solución requiere el uso de la función system en C, lo que puede no ser ideal.

    Otra opción alternativa es usar funciones de bajo nivel de WinAPI para crear vínculos rígidos a enlaces simbólicos. Los fragmentos de código proporcionados por el desarrollador de Google en su repositorio de GitHub ([[2]][2]) ofrecen una idea para implementar CreateHardLink y otras funciones relacionadas. Sin embargo, el código puede ser demasiado de bajo nivel y puede no ser compatible con versiones anteriores de Windows, como Windows 7.

    En conclusión, aunque no hay una solución directa para crear un vínculo rígido a un enlace simbólico en sí mismo en NTFS utilizando WinAPI, usar el comando MKLINK o funciones de bajo nivel de WinAPI puede ofrecer algunas soluciones. La elección depende en última instancia de los requisitos específicos del proyecto y del nivel de compatibilidad deseado con diferentes versiones de Windows.

Comments are closed.