Function Reference


_WinAPI_CreateSymbolicLink

Creates a symbolic link

#include <WinAPIFiles.au3>
_WinAPI_CreateSymbolicLink ( $sSymlink, $sTarget [, $bDirectory = False] )

Parameters

$sSymlink The name of the new file.
$sTarget The name of the existing file.
$bDirectory [optional] Specifies whether the link target is a directory.
    True - The link target is a directory.
    False - The link target is a file (Default).

Return Value

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

Remarks

To remove a symbolic link, delete the file (using _WinAPI_DeleteFile() or similar APIs) or remove the directory
(using _WinAPI_RemoveDirectory() or similar APIs) depending on what type of symbolic link is used.

The calling process must have $SE_CREATE_SYMBOLIC_LINK_NAME privilege, otherwise, the function fails, and
_WinAPI_GetLastError() returns ERROR_PRIVILEGE_NOT_HELD (1314).

This function requires Windows Vista or later.

Related

_WinAPI_DeleteFile, _WinAPI_RemoveDirectory

See Also

Search CreateSymbolicLink in MSDN Library.

Example

#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIHObj.au3>
#include <WinAPIProc.au3>
#include <WinAPISys.au3>

If Number(_WinAPI_GetVersion()) < 6.0 Then
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', 'Require Windows Vista or later.')
        Exit
EndIf

; Enable "SeCreateSymbolicLinkPrivilege" privilege to create a symbolic links
Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
Local $aAdjust
_WinAPI_AdjustTokenPrivileges($hToken, $SE_CREATE_SYMBOLIC_LINK_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
If @error Or @extended Then
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', 'You do not have the required privileges.')
        Exit
EndIf

; Create symbolic link to the directory where this file is located with prefix "@" on your Desktop
If Not _WinAPI_CreateSymbolicLink(@DesktopDir & '\' & StringRegExpReplace(@ScriptDir, '^.*\\', '@'), @ScriptDir, 1) Then
        _WinAPI_ShowLastError()
EndIf

; Restore "SeCreateSymbolicLinkPrivilege" privilege by default
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)