Erzeugt einen symbolischen Link.
#include <WinAPIFiles.au3>
_WinAPI_CreateSymbolicLink ( $sSymlink, $sTarget [, $bDirectory = False] )
$sSymlink | Der Name der neuen Datei. |
$sTarget | Der Name der bereits existierenden Datei. |
$bDirectory | [optional] Gibt an, ob das Linkziel ein Verzeichnis ist. True - Das Linkziel ist ein Verzeichnis. False - Das Linkziel ist eine Datei (Standard). |
Erfolg: | True. |
Fehler: | False. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten. |
Um einen symbolischen Link zu löschen, muss die Datei (mittels _WinAPI_DeleteFile() oder ähnlichen APIs) oder das Verzeichnis
(mittels _WinAPI_RemoveDirectory() oder ähnlichen APIs) gelöscht werden je nach Typ des verwendeten symbolischen Links.
Der aufrufende Prozess muss das $SE_CREATE_SYMBOLIC_LINK_NAME Privileg besitzen, anderenfalls schlägt die Funktion fehl und
_WinAPI_GetLastError() gibt ERROR_PRIVILEGE_NOT_HELD (1314) zurück.
Diese Funktion benötigt Windows Vista oder höher.
_WinAPI_DeleteFile, _WinAPI_RemoveDirectory
Suche nach CreateSymbolicLink in der MSDN Bibliothek.
#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)