UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_CreateSymbolicLink

Crée un lien symbolique

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

Paramètres

$sSymlink Le nom du nouveau fichier.
$sTarget Le nom du fichier existant.
$bDirectory [optionnel] Indique si la cible du lien est un répertoire.
    True - La cible du lien est un répertoire.
    False - La cible du lien est un fichier (par défaut).

Valeur de retour

Succès: Retourne True.
Échec: Retourne False, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur

Remarques

Pour supprimer un lien symbolique, supprimez le fichier (avec _WinAPI_DeleteFile() ou API similaire) ou supprimer le répertoire (avec _WinAPI_RemoveDirectory() ou API similaire) en fonction du type de lien symbolique utilisé.

Le processus appelant doit avoir le droit $SE_CREATE_SYMBOLIC_LINK_NAME, sinon, la fonction échoue, et _WinAPI_GetLastError() retourne ERROR_PRIVILEGE_NOT_HELD (1314).

Cette fonction nécessite Windows Vista ou une version ultérieure.

En relation

_WinAPI_DeleteFile, _WinAPI_RemoveDirectory

Voir aussi

Consultez CreateSymbolicLink dans la librairie MSDN.

Exemple

#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(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Requiert Windows Vista ou une version ultérieure.')
    Exit
EndIf

; Active le droit "SeCreateSymbolicLinkPrivilege" pour créer un lien symbolique
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(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Vous n''avez pas les droits nécessaires.')
    Exit
EndIf

; Crée un lien symbolique vers le répertoire où se trouve ce fichier avec le préfixe "@" sur votre bureau
If Not _WinAPI_CreateSymbolicLink(@DesktopDir & '\' & StringRegExpReplace(@ScriptDir, '^.*\\', '@'), @ScriptDir, 1) Then
    _WinAPI_ShowLastError()
EndIf

; Restaure les droits par défaut "SeCreateSymbolicLinkPrivilege"
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)