Compartir a través de


Función CreateHardLinkA (winbase.h)

Establece un vínculo físico entre un archivo existente y un archivo nuevo. Esta función solo se admite en el sistema de archivos NTFS y solo para archivos, no directorios.

Para realizar esta operación como una operación de transacción, use la función CreateHardLinkTransacted.

Sintaxis

BOOL CreateHardLinkA(
  [in] LPCSTR                lpFileName,
  [in] LPCSTR                lpExistingFileName,
       LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

Parámetros

[in] lpFileName

Nombre del nuevo archivo.

Este parámetro puede incluir la ruta de acceso, pero no puede especificar el nombre de un directorio.

De forma predeterminada, el nombre se limita a MAX_PATH caracteres. Para ampliar este límite a 32 767 caracteres anchos, anteponga "\\?\\ " a la ruta de acceso. Para obtener más información, vea Archivos de nomenclatura, rutas de acceso y espacios de nombres.

Propina

A partir de Windows 10, versión 1607, puedes optar por quitar la limitación del MAX_PATH sin tener que prepending "\\?\". Consulte la sección "Limitación máxima de longitud de ruta de acceso" de Archivos de nomenclatura, rutas de acceso y espacios de nombres para obtener más información.

[in] lpExistingFileName

Nombre del archivo existente.

Este parámetro puede incluir la ruta de acceso no puede especificar el nombre de un directorio.

De forma predeterminada, el nombre se limita a MAX_PATH caracteres. Para ampliar este límite a 32 767 caracteres anchos, anteponga "\\?\\ " a la ruta de acceso. Para obtener más información, vea Archivos de nomenclatura, rutas de acceso y espacios de nombres.

Propina

A partir de Windows 10, versión 1607, puedes optar por quitar la limitación del MAX_PATH sin tener que prepending "\\?\". Consulte la sección "Limitación máxima de longitud de ruta de acceso" de Archivos de nomenclatura, rutas de acceso y espacios de nombres para obtener más información.

lpSecurityAttributes

Reservado; debe ser null.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es distinto de cero.

Si se produce un error en la función, el valor devuelto es cero (0). Para obtener información de error extendida, llame a GetLastError.

El número máximo de vínculos duros que se pueden crear con esta función es de 1023 por archivo. Si se crean más de 1023 vínculos para un archivo, se produce un error.

Si pasa un nombre mayor que MAX_PATH caracteres a la lpFileName o parámetro lpExistingFileName de la versión ANSI de esta función o a la versión Unicode de esta función sin prepending "\\?\\" a la ruta de acceso, la función devuelve ERROR_PATH_NOT_FOUND.

Observaciones

Cualquier entrada de directorio para un archivo creado con CreateFile o CreateHardLink es un vínculo físico a un archivo asociado. Un vínculo duro adicional que se crea con el función CreateHardLink permite tener varias entradas de directorio para un archivo, es decir, varios vínculos duros al mismo archivo, que pueden ser nombres diferentes en el mismo directorio, o los mismos nombres o diferentes en directorios diferentes. Sin embargo, todos los vínculos duros a un archivo deben estar en el mismo volumen.

Dado que los vínculos duros son solo entradas de directorio para un archivo, muchos cambios en ese archivo son visibles instantáneamente para las aplicaciones que acceden a él a través de los vínculos duros que hacen referencia a él. Sin embargo, el tamaño de entrada del directorio y la información del atributo solo se actualizan para el vínculo a través del cual se realizó el cambio.

El descriptor de seguridad pertenece al archivo al que apunta un vínculo duro. El propio vínculo es solo una entrada de directorio y no tiene un descriptor de seguridad. Por lo tanto, al cambiar el descriptor de seguridad de un vínculo duro, se cambia el descriptor de seguridad del archivo subyacente y todos los vínculos duros que apuntan al archivo permiten el acceso recién especificado. No se pueden proporcionar descriptores de seguridad diferentes a un archivo por vínculo físico.

Esta función no modifica el descriptor de seguridad del archivo al que se va a vincular, incluso si la información del descriptor de seguridad se pasa en el parámetro lpSecurityAttributes.

Use DeleteFile para eliminar vínculos duros. Puede eliminarlos en cualquier orden independientemente del orden en que se creen.

Las marcas, los atributos, el acceso y el uso compartido especificados en CreateFile funcionan por archivo. Es decir, si abre un archivo que no permite el uso compartido, otra aplicación no puede compartir el archivo creando un nuevo vínculo físico al archivo.

Cuando se crea un vínculo físico en el sistema de archivos NTFS, la información del atributo de archivo en la entrada del directorio solo se actualiza cuando se abre el archivo o cuando se llama a getFileInformationByHandle con el identificador de un archivo específico.

Comportamiento de vínculo simbólico: si la ruta apunta a un vínculo simbólico, la función crea un vínculo duro al vínculo simbólico.

En Windows 8 y Windows Server 2012, esta función es compatible con las siguientes tecnologías.

Tecnología Soportado
Protocolo bloque de mensajes del servidor (SMB) 3.0
Conmutación por error transparente (TFO) de SMB 3.0 No
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) No
Sistema de archivos de volumen compartido de clúster (CsvFS)
Sistema de archivos resistente (ReFS) No
 

Tenga en cuenta que SMB 3.0 no admite la creación de vínculos duros en recursos compartidos con capacidad de disponibilidad continua.

Ejemplos

El siguiente fragmento de código muestra cómo llamar a CreateHardLink para que no modifique el descriptor de seguridad de un archivo. El parámetro pszExistingFileName puede ser el nombre de archivo original o cualquier vínculo existente a un archivo. Una vez ejecutado este código, pszNewLinkName hace referencia al archivo.

  BOOL fCreatedLink = CreateHardLink( pszNewLinkName, 
                                      pszExistingFileName, 
                                      NULL ); // reserved, must be NULL

  if ( fCreatedLink == FALSE )
   {
    ;// handle error condition
   }

Nota

El encabezado winbase.h define CreateHardLink como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [solo aplicaciones de escritorio]
servidor mínimo admitido Windows Server 2003 [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
encabezado de winbase.h (incluya Windows.h)
biblioteca de Kernel32.lib
DLL de Kernel32.dll

Consulte también

CreateFile

CreateHardLinkTransacted

DeleteFile

funciones de administración de archivos

enlaces y uniones

vínculos simbólicos