Funktionreferenz


_WinAPI_CreateSymbolicLink

Beschreibung anzeigen in

Erzeugt einen symbolischen Link.

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

Parameter

$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).

Rückgabewert

Erfolg: True.
Fehler: False. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

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.

Verwandte Funktionen

_WinAPI_DeleteFile, _WinAPI_RemoveDirectory

Siehe auch

Suche nach CreateSymbolicLink in der MSDN Bibliothek.

Beispiel

#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)