Compartilhar via


estrutura FILE_LINK_INFORMATION (ntifs.h)

A estrutura FILE_LINK_INFORMATION é usada para criar um link rígido do NTFS para um arquivo existente.

Sintaxe

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;

Membros

DUMMYUNIONNAME

DUMMYUNIONNAME.ReplaceIfExists

Defina como TRUE para especificar que, se o link já existir, ele deverá ser substituído pelo novo link. Defina como FALSE se a operação de criação de link falhar se o link já existir. Disponível a partir do Windows 10, versão 1809.

DUMMYUNIONNAME.Flags

Sinalizadores para a operação de link. Esse campo só é aplicável quando usado com a classe de informações FileLinkInformationEx. Disponível a partir do Windows 10, versão 1809.

Estes são os valores possíveis:

Valor Significado
FILE_LINK_REPLACE_IF_EXISTS (0x00000001) Se um arquivo com o nome fornecido já existir, ele deverá ser substituído pelo novo link. Equivalente ao campo ReplaceIfExists usado com a classe de informações FileLinkInformation.
FILE_LINK_POSIX_SEMANTICS (0x00000002) Se FILE_LINK_REPLACE_IF_EXISTS também for especificado, permita a substituição de um arquivo mesmo se houver identificadores existentes nele. Os identificadores existentes para o arquivo substituído continuam a ser válidos para operações como leitura e gravação. Qualquer abertura subsequente do nome de destino abrirá o novo link, não o arquivo substituído.
FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) Ao criar um link em um novo diretório, suprima todas as regras de herança relacionadas à propriedade de ID de reserva de armazenamento do arquivo.
FILE_LINK_NO_INCREASE_AVAILABLE_SPACE (0x00000010) Se FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE também não for especificado, ao criar um link em um novo diretório, redimensione automaticamente as áreas de reserva de armazenamento afetadas conforme necessário para impedir que o espaço livre visível do usuário no volume aumente. Requer o gerenciamento do acesso ao volume.
FILE_LINK_NO_DECREASE_AVAILABLE_SPACE (0x00000020) Se FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE também não for especificado, ao criar um link em um novo diretório, redimensione automaticamente as áreas de reserva de armazenamento afetadas conforme necessário para impedir que o espaço livre visível do usuário no volume dimpecifique. Requer o gerenciamento do acesso ao volume.
FILE_LINK_PRESERVE_AVAILABLE_SPACE (0x00000030) Equivalente a especificar FILE_LINK_NO_INCREASE_AVAILABLE_SPACE e FILE_LINK_NO_DECREASE_AVAILABLE_SPACE.
FILE_LINK_IGNORE_READONLY_ATTRIBUTE (0x00000040) Se FILE_LINK_REPLACE_IF_EXISTS também for especificado, permita a substituição de um arquivo mesmo que ele seja somente leitura. Requer WRITE_ATTRIBUTES acesso ao arquivo substituído.
FILE_LINK_FORCE_RESIZE_TARGET_SR (0x00000080) Se FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE também não for especificado, ao criar um link em um novo diretório que faça parte de uma área de reserva de armazenamento diferente, sempre aumente a área de reserva de armazenamento do diretório de destino pelo tamanho total do arquivo que está sendo vinculado. Requer o gerenciamento do acesso ao volume.
FILE_LINK_FORCE_RESIZE_SOURCE_SR (0x00000100) Se FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE também não for especificado, ao criar um link em um novo diretório que faça parte de uma área de reserva de armazenamento diferente, sempre reduza a área de reserva de armazenamento do diretório de origem pelo tamanho total do arquivo que está sendo vinculado. Requer o gerenciamento do acesso ao volume.
FILE_LINK_FORCE_RESIZE_SR (0x00000180) Equivalente a especificar FILE_LINK_FORCE_RESIZE_TARGET_SR e FILE_LINK_FORCE_RESIZE_SOURCE_SR.

ReplaceIfExists

Defina como TRUE para especificar que, se o link já existir, ele deverá ser substituído pelo novo link. Defina como FALSE se a operação de criação de link falhar se o link já existir.

RootDirectory

Se o link for criado no mesmo diretório ao qual o arquivo está sendo vinculado ou se o membro FileName contiver o nome de caminho completo para o link a ser criado, isso será NULL. Caso contrário, é um identificador para o diretório em que o link deve ser criado.

FileNameLength

Comprimento, em bytes, da cadeia de caracteres de nome de arquivo.

FileName[1]

O primeiro caractere do nome a ser atribuído ao link recém-criado. Isso é seguido na memória pelo restante da cadeia de caracteres. Se o membro RootDirectory for NULL e o link for criado em um diretório diferente do arquivo ao qual está sendo vinculado, esse membro especificará o nome de caminho completo para o link a ser criado. Caso contrário, ele especifica apenas o nome do arquivo. (Consulte a seção Comentários para ZwQueryInformationFile para obter detalhes sobre a sintaxe desta cadeia de caracteres de nome de arquivo.)

Comentários

A estrutura FILE_LINK_INFORMATION é usada para criar um link rígido do NTFS para um arquivo existente. Essa operação pode ser executada de qualquer uma das seguintes maneiras:

  • Chame FltSetInformationFile ou ZwSetInformationFile, passando FileLinkInformation como o valor de FileInformationClass e passando um buffer alocado pelo chamador FILE_LINK_INFORMATION estruturado como o valor de FileInformation. O parâmetro FileHandle especifica o arquivo existente ao qual o link rígido deve apontar.

  • Crie um IRP com o código de função principal IRP_MJ_SET_INFORMATION.

Nenhum direito de acesso específico é necessário para definir essas informações.

Os minifiltros do sistema de arquivos devem usar FltSetInformationFile, não ZwSetInformationFile, para definir essas informações para um arquivo.

Para obter mais informações sobre links rígidos do NTFS, consulte a documentação SDK do Microsoft Windows para a função CreateHardLink do Win32.

O tamanho do buffer FileInformation passado para FltSetInformationFile ou ZwSetInformationFile deve ser pelo menos sizeof(FILE_LINK_INFORMATION).

Essa estrutura deve ser alinhada em um limite LONG (4 bytes).

Requisitos

Requisito Valor
Cabeçalho ntifs.h (inclua Ntifs.h, Fltkernel.h)

Confira também

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile