# Function Reference

# _WinAPI_CreateHardLink

Establishes a hard link between an existing file and a new file

#include <WinAPIFiles.au3>
_WinAPI_CreateHardLink ( $sNewFile, $sExistingFile )

## Parameters

$sNewFile | The name of the new file.
$sExistingFile | The name of the existing file.

## Return Value

Success: | True.
Failure: | False, call _WinAPI_GetLastError() to get extended error information

## Remarks

The _WinAPI_CreateHardLink() is only supported on the NTFS file system, and only for files, not directories.
The security descriptor belongs to the file to which a hard link points. The link itself is only a directory entry, and does not have a security descriptor.
Therefore, when you change the security descriptor of a hard link, you a change the security descriptor of the underlying file, and all hard links that point to the file allow the newly specified access.
You cannot give a file different security descriptors on a per-hard-link basis.
Use _WinAPI_DeleteFile() function to delete hard links. You can delete them in any order regardless of the order in which they are created.

## Related

_WinAPI_DeleteFile

## See Also

Search CreateHardLink in MSDN Library.

## Example

    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIFiles.au3>
    #include <WinAPIShPath.au3>

    Local $sFile = @DesktopDir & '\' & StringRegExpReplace(_WinAPI_PathFindFileName(@ScriptName), '\A_+', '@')

    ; Create hard link to the current file with prefix "@" on your Desktop
    If Not _WinAPI_CreateHardLink($sFile, @ScriptFullPath) Then
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', 'Unable to create hard link.')
        Exit
    EndIf

    ; Enumerate all hard links to the file
    Local $aData = _WinAPI_EnumHardLinks($sFile)

    _ArrayDisplay($aData, '_WinAPI_EnumHardLinks')

    FileDelete($sFile)