FILE_LINK_INFORMATION 構造体 (ntifs.h)

FILE_LINK_INFORMATION構造は、既存のファイルへの NTFS ハード リンクを作成するために使用されます。

構文

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;

メンバー

DUMMYUNIONNAME

DUMMYUNIONNAME.ReplaceIfExists

リンクが既に存在する場合は、新しいリンクに置き換えることを指定するには、TRUE に設定します。 リンクが既に存在する場合、リンク作成操作が失敗する場合は FALSE に設定します。 Windows 10 Version 1809 以降で使用できます。

DUMMYUNIONNAME.Flags

リンク操作のフラグ。 このフィールドは、FileLinkInformationEx 情報クラスで使用する場合にのみ適用されます。 Windows 10 Version 1809 以降で使用できます。

可能な値を次に示します。

意味
FILE_LINK_REPLACE_IF_EXISTS (0x00000001) 指定した名前のファイルが既に存在する場合は、新しいリンクに置き換える必要があります。 FileLinkInformation 情報クラスで使用される ReplaceIfExists フィールドと同等です。
FILE_LINK_POSIX_SEMANTICS (0x00000002) FILE_LINK_REPLACE_IF_EXISTSも指定されている場合は、既存のハンドルがある場合でも、ファイルを置き換えることを許可します。 置き換えられたファイルへの既存のハンドルは、読み取りおよび書き込みなどの操作に対して引き続き有効です。 後続のターゲット名が開くと、置き換えられたファイルではなく、新しいリンクが開きます。
FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) 新しいディレクトリにリンクを作成する場合は、ファイルのストレージ予約 ID プロパティに関連する継承規則を抑制します。
FILE_LINK_NO_INCREASE_AVAILABLE_SPACE (0x00000010) FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCEも指定しない場合は、新しいディレクトリにリンクを作成するときに、必要に応じて影響を受ける記憶域の予約領域のサイズを自動的に変更して、ボリューム上のユーザーに表示される空き領域が増えないようにします。 ボリューム アクセスの管理が必要です。
FILE_LINK_NO_DECREASE_AVAILABLE_SPACE (0x00000020) FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCEも指定しない場合は、新しいディレクトリにリンクを作成するときに、必要に応じて影響を受ける記憶域の予約領域のサイズを自動的に変更して、ボリューム上のユーザーに表示される空き領域が減少しないようにします。 ボリューム アクセスの管理が必要です。
FILE_LINK_PRESERVE_AVAILABLE_SPACE (0x00000030) FILE_LINK_NO_INCREASE_AVAILABLE_SPACEとFILE_LINK_NO_DECREASE_AVAILABLE_SPACEの両方を指定することと同じです。
FILE_LINK_IGNORE_READONLY_ATTRIBUTE (0x00000040) FILE_LINK_REPLACE_IF_EXISTSも指定されている場合は、読み取り専用であってもファイルを置き換えることを許可します。 置き換えられたファイルWRITE_ATTRIBUTESアクセスする必要があります。
FILE_LINK_FORCE_RESIZE_TARGET_SR (0x00000080) FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCEも指定されていない場合は、別のストレージ予約領域の一部である新しいディレクトリにリンクを作成するときに、リンクされているファイルのフルサイズでターゲット ディレクトリの記憶域の予約領域を常に拡大します。 ボリューム アクセスの管理が必要です。
FILE_LINK_FORCE_RESIZE_SOURCE_SR (0x00000100) FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCEも指定されていない場合は、別のストレージ予約領域の一部である新しいディレクトリにリンクを作成するときに、リンクされているファイルのフルサイズでソース ディレクトリの記憶域を常に縮小します。 ボリューム アクセスの管理が必要です。
FILE_LINK_FORCE_RESIZE_SR (0x00000180) FILE_LINK_FORCE_RESIZE_TARGET_SRとFILE_LINK_FORCE_RESIZE_SOURCE_SRの両方を指定することと同じです。

ReplaceIfExists

リンクが既に存在する場合は、新しいリンクに置き換えることを指定するには、TRUE に設定します。 リンクが既に存在する場合、リンク作成操作が失敗する場合は FALSE に設定します。

RootDirectory

リンク先のファイルと同じディレクトリにリンクを作成する場合、または FileName メンバーに作成するリンクの完全なパス名が含まれている場合、これは NULL です。 それ以外の場合は、リンクを作成するディレクトリのハンドルです。

FileNameLength

ファイル名文字列の長さ (バイト単位)。

FileName[1]

新しく作成されたリンクに割り当てられる名前の最初の文字。 その後、メモリ内で文字列の残りの部分が続きます。 RootDirectory メンバーが NULL で、リンク先のファイルとは異なるディレクトリにリンクを作成する場合、このメンバーはリンクを作成するための完全なパス名を指定します。 それ以外の場合は、ファイル名のみを指定します。 (このファイル名文字列の構文の詳細については、 ZwQueryInformationFile の「解説」セクションを参照してください)。

注釈

FILE_LINK_INFORMATION構造は、既存のファイルへの NTFS ハード リンクを作成するために使用されます。 この操作は、次のいずれかの方法で実行できます。

  • FltSetInformationFile または ZwSetInformationFile を呼び出し、FileLinkInformationClass の値として FileLinkInformation を渡し、呼び出し元によって割り当てられたFILE_LINK_INFORMATION構造化バッファーを FileInformation の値として渡します。 FileHandle パラメーターは、ハード リンクが指す既存のファイルを指定します。

  • 主要な関数コード IRP_MJ_SET_INFORMATIONを使用して IRP を作成します。

この情報を設定するために特定のアクセス権は必要ありません。

ファイル システム ミニフィルターでは、ファイルのこの情報を設定するために、ZwSetInformationFile ではなく FltSetInformationFile を使用する必要があります。

NTFS ハード リンクの詳細については、Win32 CreateHardLink 関数のMicrosoft Windows SDKドキュメントを参照してください。

FltSetInformationFile または ZwSetInformationFile に渡される FileInformation バッファーのサイズは、少なくとも sizeof(FILE_LINK_INFORMATION) である必要があります。

この構造体は、LONG (4 バイト) 境界に配置する必要があります。

要件

要件
Header ntifs.h (Ntifs.h、Fltkernel.h を含む)

こちらもご覧ください

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile