CreateHardLinkA-Funktion (winbase.h)
Stellt eine feste Verknüpfung zwischen einer vorhandenen Datei und einer neuen Datei her. Diese Funktion wird nur im NTFS-Dateisystem unterstützt, und nur für Dateien, nicht für Verzeichnisse.
Verwenden Sie die CreateHardLinkTransacted--Funktion, um diesen Vorgang als transacted-Vorgang auszuführen.
Syntax
BOOL CreateHardLinkA(
[in] LPCSTR lpFileName,
[in] LPCSTR lpExistingFileName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
Parameter
[in] lpFileName
Der Name der neuen Datei.
Dieser Parameter kann den Pfad enthalten, aber den Namen eines Verzeichnisses nicht angeben.
Standardmäßig ist der Name auf MAX_PATH Zeichen beschränkt. Um diesen Grenzwert auf 32.767 breite Zeichen zu erweitern, stellen Sie "\\?\" dem Pfad voran. Weitere Informationen finden Sie unter Namensdateien, Pfade und Namespaces.
Trinkgeld
Ab Windows 10, Version 1607, können Sie sich anmelden, um die MAX_PATH Einschränkung zu entfernen, ohne "\\?\". Weitere Informationen finden Sie im Abschnitt "Maximale Pfadlängenbeschränkung" Benennungsdateien, Pfade und Namespaces.
[in] lpExistingFileName
Der Name der vorhandenen Datei.
Dieser Parameter kann den Pfad enthalten, der den Namen eines Verzeichnisses nicht angeben kann.
Standardmäßig ist der Name auf MAX_PATH Zeichen beschränkt. Um diesen Grenzwert auf 32.767 breite Zeichen zu erweitern, stellen Sie "\\?\" dem Pfad voran. Weitere Informationen finden Sie unter Namensdateien, Pfade und Namespaces.
Trinkgeld
Ab Windows 10, Version 1607, können Sie sich anmelden, um die MAX_PATH Einschränkung zu entfernen, ohne "\\?\". Weitere Informationen finden Sie im Abschnitt "Maximale Pfadlängenbeschränkung" Benennungsdateien, Pfade und Namespaces.
lpSecurityAttributes
Reserviert; muss NULL-sein.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
Wenn die Funktion fehlschlägt, ist der Rückgabewert null (0). Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
Die maximale Anzahl harter Verknüpfungen, die mit dieser Funktion erstellt werden können, beträgt 1023 pro Datei. Wenn für eine Datei mehr als 1023 Verknüpfungen erstellt werden, führt ein Fehler zu einem Fehler.
Wenn Sie einen Namen, der länger als MAX_PATH Zeichen ist, an den lpFileName oder lpExistingFileName Parameter der ANSI-Version dieser Funktion oder an die Unicode-Version dieser Funktion übergeben, ohne "\\?\" vor dem Pfad ausstehen zu müssen, gibt die Funktion ERROR_PATH_NOT_FOUND zurück.
Bemerkungen
Jeder Verzeichniseintrag für eine Datei, die mit CreateFile- oder CreateHardLink- erstellt wird, ist eine feste Verknüpfung zu einer zugeordneten Datei. Eine zusätzliche feste Verknüpfung, die mit der CreateHardLink--Funktion erstellt wird, ermöglicht es Ihnen, mehrere Verzeichniseinträge für eine Datei zu haben, d. h. mehrere feste Verknüpfungen mit derselben Datei, die unterschiedliche Namen im selben Verzeichnis sein kann, oder die gleichen oder unterschiedliche Namen in verschiedenen Verzeichnissen. Alle harten Links zu einer Datei müssen sich jedoch auf demselben Volume befinden.
Da hardlinks nur Verzeichniseinträge für eine Datei sind, sind viele Änderungen an dieser Datei sofort für Anwendungen sichtbar, die über die hardlinks darauf zugreifen, die darauf verweisen. Die Verzeichniseintragsgröße und Attributinformationen werden jedoch nur für den Link aktualisiert, über den die Änderung vorgenommen wurde.
Der Sicherheitsdeskriptor gehört zu der Datei, auf die ein harter Link verweist. Der Link selbst ist nur ein Verzeichniseintrag und verfügt nicht über einen Sicherheitsdeskriptor. Wenn Sie daher den Sicherheitsdeskriptor eines hardlinks ändern, ändern Sie die Sicherheitsbeschreibung der zugrunde liegenden Datei, und alle hardlinks, die auf die Datei verweisen, ermöglichen den neu angegebenen Zugriff. Sie können einer Datei keine anderen Sicherheitsdeskriptoren pro Hardlink entziehen.
Diese Funktion ändert nicht den Sicherheitsdeskriptor der Datei, mit der verknüpft werden soll, auch wenn Sicherheitsbeschreibungsinformationen im lpSecurityAttributes Parameter übergeben werden.
Verwenden Sie DeleteFile-, um feste Links zu löschen. Sie können sie in beliebiger Reihenfolge löschen, unabhängig von der Reihenfolge, in der sie erstellt werden.
Kennzeichen, Attribute, Zugriff und Freigabe, die in CreateFile- pro Datei ausgeführt werden. Wenn Sie eine Datei öffnen, die die Freigabe nicht zulässt, kann eine andere Anwendung die Datei nicht freigeben, indem Sie eine neue feste Verknüpfung mit der Datei erstellen.
Wenn Sie eine feste Verknüpfung im NTFS-Dateisystem erstellen, werden die Dateiattributeinformationen im Verzeichniseintrag nur aktualisiert, wenn die Datei geöffnet wird, oder wenn GetFileInformationByHandle mit dem Handle einer bestimmten Datei aufgerufen wird.
Verhalten symbolischer Verknüpfungen – Wenn der Pfad auf einen symbolischen Link zeigt, erstellt die Funktion eine harte Verknüpfung mit der symbolischen Verknüpfung.
In Windows 8 und Windows Server 2012 wird diese Funktion von den folgenden Technologien unterstützt.
Technologie | Abgestützt |
---|---|
Server Message Block (SMB) 3.0-Protokoll | Ja |
SMB 3.0 Transparent Failover (TFO) | Nein |
SMB 3.0 mit Skalierungsdateifreigaben (SO) | Nein |
Freigegebenes Clustervolumedateisystem (CsvFS) | Ja |
Resilient File System (ReFS) | Nein |
Beachten Sie, dass SMB 3.0 die Erstellung von hardlinks auf Freigaben mit fortlaufender Verfügbarkeitsfunktion nicht unterstützt.
Beispiele
Der folgende Codeausschnitt zeigt, wie Sie CreateHardLink- aufrufen, sodass der Sicherheitsdeskriptor einer Datei nicht geändert wird. Der pszExistingFileName Parameter kann der ursprüngliche Dateiname oder ein beliebiger vorhandener Link zu einer Datei sein. Nachdem dieser Code ausgeführt wurde, verweist pszNewLinkName auf die Datei.
BOOL fCreatedLink = CreateHardLink( pszNewLinkName,
pszExistingFileName,
NULL ); // reserved, must be NULL
if ( fCreatedLink == FALSE )
{
;// handle error condition
}
Anmerkung
Der winbase.h-Header definiert CreateHardLink als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2003 [Nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | winbase.h (enthalten Windows.h) |
Library | Kernel32.lib |
DLL- | Kernel32.dll |