Stellt einen Hardlink zwischen einer existierenden und einer neuen Datei her.
#include <WinAPIFiles.au3>
_WinAPI_CreateHardLink ( $sNewFile, $sExistingFile )
$sNewFile | Der Name der neuen Datei. |
$sExistingFile | Der Name der existierenden Datei. |
Erfolg: | True. |
Fehler: | False. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten. |
_WinAPI_CreateHardLink() wird nur auf einem NTFS-Dateisystem unterstützt zudem nur für Dateien und nicht für Verzeichnisse.
Der Standardsicherheitsdeskriptor gehört zu der Datei auf welche der Hardlink zeigt. Der Link selbst ist nur ein Verzeichniseintrag und hat keinen Sicherheitsdeskriptor.
Deshalb wird, wenn man immer den Sicherheitsdeskriptor eines Hardlinks ändert, immer der Sicherheitsdeskriptor der drunterliegenden Datei geändert und alle Hardlinks zu der Datei erlauben den neuangegebenen Zugang.
Deshalb kann man keinen unterschiedlichen Sicherheitsdeskriptor auf einer pro-Hardlink-Bais angeben.
Mit _WinAPI_DeleteFile() kann man Hardlinks löschen. Die Reihenfolge in welcher man sie löscht spielt keine Rolle.
Suche nach CreateHardLink in der MSDN Bibliothek.
#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)