Partager via


structure FILE_LINK_INFORMATION (ntifs.h)

La structure FILE_LINK_INFORMATION est utilisée pour créer un lien dur NTFS vers un fichier existant.

Syntaxe

typedef struct _FILE_LINK_INFORMATION {
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5)
    union {
        BOOLEAN ReplaceIfExists;  // FileLinkInformation
        ULONG Flags;              // FileLinkInformationEx
    } DUMMYUNIONNAME;
#else
    BOOLEAN ReplaceIfExists;
#endif
    HANDLE RootDirectory;
    ULONG FileNameLength;
    WCHAR FileName[1];
} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;

Membres

DUMMYUNIONNAME

DUMMYUNIONNAME.ReplaceIfExists

Définissez sur TRUE pour spécifier que si le lien existe déjà, il doit être remplacé par le nouveau lien. Définissez sur FALSE si l’opération de création de lien doit échouer si le lien existe déjà. Disponible à partir de Windows 10, version 1809.

DUMMYUNIONNAME.Flags

Indicateurs de l’opération de lien. Ce champ s’applique uniquement lorsqu’il est utilisé avec la classe d’informations FileLinkInformationEx. Disponible à partir de Windows 10, version 1809.

Les valeurs possibles sont les suivantes :

Valeur Signification
FILE_LINK_REPLACE_IF_EXISTS (0x00000001) Si un fichier portant le nom donné existe déjà, il doit être remplacé par le nouveau lien. Équivalent au champ ReplaceIfExists utilisé avec la classe d’informations FileLinkInformation.
FILE_LINK_POSIX_SEMANTICS (0x00000002) Si FILE_LINK_REPLACE_IF_EXISTS est également spécifié, autorisez le remplacement d’un fichier même s’il existe des handles. Les handles existants dans le fichier remplacé continuent d’être valides pour les opérations telles que la lecture et l’écriture. Toutes les ouvertures suivantes du nom cible ouvrent le nouveau lien, et non le fichier remplacé.
FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) Lors de la création d’un lien dans un nouveau répertoire, supprimez toutes les règles d’héritage liées à la propriété d’ID de réserve de stockage du fichier.
FILE_LINK_NO_INCREASE_AVAILABLE_SPACE (0x00000010) Si FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE n’est pas également spécifié, lors de la création d’un lien dans un nouveau répertoire, redimensionnez automatiquement les zones de réserve de stockage affectées si nécessaire pour empêcher l’augmentation de l’espace libre visible de l’utilisateur sur le volume. Nécessite la gestion de l’accès au volume.
FILE_LINK_NO_DECREASE_AVAILABLE_SPACE (0x00000020) Si FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE n’est pas également spécifié, lors de la création d’un lien dans un nouveau répertoire, redimensionnez automatiquement les zones de réserve de stockage affectées si nécessaire pour empêcher la diminution de l’espace libre visible de l’utilisateur sur le volume. Nécessite la gestion de l’accès au volume.
FILE_LINK_PRESERVE_AVAILABLE_SPACE (0x00000030) Équivaut à spécifier à la fois FILE_LINK_NO_INCREASE_AVAILABLE_SPACE et FILE_LINK_NO_DECREASE_AVAILABLE_SPACE.
FILE_LINK_IGNORE_READONLY_ATTRIBUTE (0x00000040) Si FILE_LINK_REPLACE_IF_EXISTS est également spécifié, autorisez le remplacement d’un fichier même s’il est en lecture seule. Nécessite WRITE_ATTRIBUTES accès au fichier remplacé.
FILE_LINK_FORCE_RESIZE_TARGET_SR (0x00000080) Si FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE n’est pas également spécifié, lors de la création d’un lien dans un nouveau répertoire faisant partie d’une autre zone de réserve de stockage, augmentez toujours la zone de réserve de stockage du répertoire cible par la taille totale du fichier lié. Nécessite la gestion de l’accès au volume.
FILE_LINK_FORCE_RESIZE_SOURCE_SR (0x00000100) Si FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE n’est pas également spécifié, lors de la création d’un lien dans un nouveau répertoire faisant partie d’une autre zone de réserve de stockage, réduisez toujours la zone de réserve de stockage du répertoire source par la taille totale du fichier lié. Nécessite la gestion de l’accès au volume.
FILE_LINK_FORCE_RESIZE_SR (0x00000180) Équivaut à spécifier à la fois FILE_LINK_FORCE_RESIZE_TARGET_SR et FILE_LINK_FORCE_RESIZE_SOURCE_SR.

ReplaceIfExists

Définissez sur TRUE pour spécifier que si le lien existe déjà, il doit être remplacé par le nouveau lien. Définissez sur FALSE si l’opération de création de lien doit échouer si le lien existe déjà.

RootDirectory

Si le lien doit être créé dans le même répertoire que le fichier auquel est lié, ou si le membre FileName contient le chemin d’accès complet du lien à créer, il s’agit de la valeur NULL. Sinon, il s’agit d’un handle pour le répertoire où le lien doit être créé.

FileNameLength

Longueur, en octets, de la chaîne de nom de fichier.

FileName[1]

Premier caractère du nom à affecter au lien nouvellement créé. Ceci est suivi en mémoire par le reste de la chaîne. Si le membre RootDirectory a la valeur NULL et que le lien doit être créé dans un répertoire différent du fichier auquel est lié, ce membre spécifie le chemin d’accès complet du lien à créer. Sinon, il spécifie uniquement le nom du fichier. (Consultez la section Remarques pour ZwQueryInformationFile pour plus d’informations sur la syntaxe de cette chaîne de nom de fichier.)

Remarques

La structure FILE_LINK_INFORMATION est utilisée pour créer un lien dur NTFS vers un fichier existant. Cette opération peut être effectuée de l’une des manières suivantes :

  • Appelez FltSetInformationFile ou ZwSetInformationFile, en transmettant FileLinkInformation comme valeur de FileInformationClass et en transmettant une mémoire tampon allouée FILE_LINK_INFORMATION structurée par l’appelant comme valeur de FileInformation. Le paramètre FileHandle spécifie le fichier existant vers lequel le lien physique doit pointer.

  • Créez un IRP avec le code de fonction principal IRP_MJ_SET_INFORMATION.

Aucun droit d’accès spécifique n’est requis pour définir ces informations.

Les minifiltres du système de fichiers doivent utiliser FltSetInformationFile, et non ZwSetInformationFile, pour définir ces informations pour un fichier.

Pour plus d’informations sur les liens durs NTFS, consultez la documentation Microsoft Windows SDK pour la fonction CreateHardLink Win32.

La taille de la mémoire tampon FileInformation passée à FltSetInformationFile ou ZwSetInformationFile doit être au moins sizeof(FILE_LINK_INFORMATION).

Cette structure doit être alignée sur une limite LONG (4 octets).

Configuration requise

Condition requise Valeur
En-tête ntifs.h (include Ntifs.h, Fltkernel.h)

Voir aussi

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile