struttura FILE_LINK_INFORMATION (ntifs.h)

La struttura FILE_LINK_INFORMATION viene usata per creare un collegamento rigido NTFS a un file esistente.

Sintassi

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;

Members

DUMMYUNIONNAME

DUMMYUNIONNAME.ReplaceIfExists

Impostare su TRUE per specificare che, se il collegamento esiste già, deve essere sostituito con il nuovo collegamento. Impostare su FALSE se l'operazione di creazione del collegamento non riesce se il collegamento esiste già. Disponibile a partire da Windows 10, versione 1809.

DUMMYUNIONNAME.Flags

Flag per l'operazione di collegamento. Questo campo è applicabile solo se usato con la classe di informazioni FileLinkInformationEx. Disponibile a partire da Windows 10, versione 1809.

Ecco i valori possibili:

Valore Significato
FILE_LINK_REPLACE_IF_EXISTS (0x00000001) Se esiste già un file con il nome specificato, deve essere sostituito con il nuovo collegamento. Equivale al campo ReplaceIfExists utilizzato con la classe di informazioni FileLinkInformation.
FILE_LINK_POSIX_SEMANTICS (0x00000002) Se viene specificato anche FILE_LINK_REPLACE_IF_EXISTS, consentire la sostituzione di un file anche se sono presenti handle esistenti. Gli handle esistenti nel file sostituito continuano a essere validi per operazioni quali lettura e scrittura. Qualsiasi apertura successiva del nome di destinazione aprirà il nuovo collegamento, non il file sostituito.
FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) Quando si crea un collegamento in una nuova directory, eliminare le regole di ereditarietà correlate alla proprietà ID riserva archiviazione del file.
FILE_LINK_NO_INCREASE_AVAILABLE_SPACE (0x00000010) Se non viene specificato FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE, quando si crea un collegamento in una nuova directory, ridimensionare automaticamente le aree di riserva interessate in base alle esigenze per impedire all'utente di aumentare lo spazio disponibile visibile sul volume. Richiede la gestione dell'accesso al volume.
FILE_LINK_NO_DECREASE_AVAILABLE_SPACE (0x00000020 ) Se non viene specificato anche FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE, quando si crea un collegamento in una nuova directory, ridimensionare automaticamente le aree di riserva interessate in base alle esigenze per impedire all'utente di ridurre lo spazio libero visibile sul volume. Richiede la gestione dell'accesso al volume.
FILE_LINK_PRESERVE_AVAILABLE_SPACE (0x00000030) Equivale a specificare sia FILE_LINK_NO_INCREASE_AVAILABLE_SPACE che FILE_LINK_NO_DECREASE_AVAILABLE_SPACE.
FILE_LINK_IGNORE_READONLY_ATTRIBUTE (0x00000040) Se viene specificato anche FILE_LINK_REPLACE_IF_EXISTS, consentire la sostituzione di un file anche se è di sola lettura. Richiede WRITE_ATTRIBUTES l'accesso al file sostituito.
FILE_LINK_FORCE_RESIZE_TARGET_SR (0x00000080) Se non viene specificato FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE, quando si crea un collegamento in una nuova directory che fa parte di un'area di riserva di archiviazione diversa, aumentare sempre l'area di riserva di archiviazione della directory di destinazione in base alle dimensioni complete del file collegato. Richiede la gestione dell'accesso al volume.
FILE_LINK_FORCE_RESIZE_SOURCE_SR (0x00000100) Se non viene specificato FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE, quando si crea un collegamento in una nuova directory che fa parte di un'area di riserva di archiviazione diversa, compattare sempre l'area di riserva di archiviazione della directory di origine in base alle dimensioni complete del file collegato. Richiede la gestione dell'accesso al volume.
FILE_LINK_FORCE_RESIZE_SR (0x00000180) Equivale a specificare sia FILE_LINK_FORCE_RESIZE_TARGET_SR che FILE_LINK_FORCE_RESIZE_SOURCE_SR.

ReplaceIfExists

Impostare su TRUE per specificare che, se il collegamento esiste già, deve essere sostituito con il nuovo collegamento. Impostare su FALSE se l'operazione di creazione del collegamento non riesce se il collegamento esiste già.

RootDirectory

Se il collegamento deve essere creato nella stessa directory del file a cui è collegato o se il membro FileName contiene il percorso completo per il collegamento da creare, questo è NULL. In caso contrario, si tratta di un handle per la directory in cui deve essere creato il collegamento.

FileNameLength

Lunghezza, in byte, della stringa del nome file.

FileName[1]

Primo carattere del nome da assegnare al collegamento appena creato. Questo è seguito in memoria dal resto della stringa. Se il membro RootDirectory è NULL e il collegamento deve essere creato in una directory diversa dal file a cui è collegato, questo membro specifica il percorso completo per il collegamento da creare. In caso contrario, specifica solo il nome del file. Per informazioni dettagliate sulla sintassi di questa stringa di nome file, vedere la sezione Osservazioni per ZwQueryInformationFile .

Commenti

La struttura FILE_LINK_INFORMATION viene usata per creare un collegamento rigido NTFS a un file esistente. Questa operazione può essere eseguita in uno dei modi seguenti:

  • Chiama FltSetInformationFile o ZwSetInformationFile, passando FileLinkInformation come valore di FileInformationClass e passando un buffer strutturato FILE_LINK_INFORMATION chiamante come valore di FileInformation. Il parametro FileHandle specifica il file esistente a cui deve puntare il collegamento rigido.

  • Creare un'istanza di IRP con codice di funzione principale IRP_MJ_SET_INFORMATION.

Per impostare queste informazioni non sono necessari diritti di accesso specifici.

I minifiltri del file system devono usare FltSetInformationFile, non ZwSetInformationFile, per impostare queste informazioni per un file.

Per altre informazioni sui collegamenti rigidi NTFS, vedere la documentazione di Microsoft Windows SDK per la funzione CreateHardLink Win32.

Le dimensioni del buffer FileInformation passate a FltSetInformationFile o ZwSetInformationFile devono essere almeno sizeof(FILE_LINK_INFORMATION).

Questa struttura deve essere allineata su un limite LONG (4 byte).

Requisiti

Requisito Valore
Intestazione ntifs.h (include Ntifs.h, Fltkernel.h)

Vedi anche

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile