Partilhar 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.

Aqui estão os valores possíveis:

Valor Significado
FILE_LINK_REPLACE_IF_EXISTS (0x00000001) Se já existir um arquivo com o nome fornecido, 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 substituir 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. Todas as aberturas subsequentes do nome de destino abrirão 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, suprime 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 gerenciar o 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 gerenciar o 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 substituir 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 gerenciar o 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 gerenciar o 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 que o arquivo ao qual está sendo vinculado ou se o FileName membro contiver o nome completo do 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 do 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 especifica o nome completo do 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.)

Observações

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 por 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 do 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 tamanho de(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)

Consulte também

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile