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)