estrutura USN_RECORD_V4 (winioctl.h)

Contém as informações de um registro do diário de alterações USN (números de sequência de atualização) versão 4.0. Os registros das versões 2.0 e 3.0 são definidos pelo USN_RECORD_V2 (também chamado de estruturas USN_RECORD) e USN_RECORD_V3, respectivamente.

Sintaxe

typedef struct {
  USN_RECORD_COMMON_HEADER Header;
  FILE_ID_128              FileReferenceNumber;
  FILE_ID_128              ParentFileReferenceNumber;
  USN                      Usn;
  DWORD                    Reason;
  DWORD                    SourceInfo;
  DWORD                    RemainingExtents;
  WORD                     NumberOfExtents;
  WORD                     ExtentSize;
  USN_RECORD_EXTENT        Extents[1];
} USN_RECORD_V4, *PUSN_RECORD_V4;

Membros

Header

Uma estrutura USN_RECORD_COMMON_HEADER que descreve o comprimento do registro, a versão principal e a versão secundária do registro.

FileReferenceNumber

O número ordinal de 128 bits do arquivo ou diretório para o qual esta anotação de registro é alterada.

Esse valor é um valor atribuído arbitrariamente que associa um registro de diário a um arquivo.

ParentFileReferenceNumber

O número ordinal de 128 bits do diretório em que o arquivo ou diretório associado a esse registro está localizado.

Esse valor é um valor atribuído arbitrariamente que associa um registro de diário a um diretório pai.

Usn

A USN deste registro.

Reason

Os sinalizadores que identificam os motivos das alterações acumuladas neste arquivo ou registro de diário de diretório desde que o arquivo ou diretório foi aberto.

Quando um arquivo ou diretório é fechado, um registro usn final é gerado com o sinalizador USN_REASON_CLOSE definido. A próxima alteração (por exemplo, após a próxima operação ou exclusão aberta) inicia um novo registro com um novo conjunto de sinalizadores de motivo.

Uma operação de renomeação ou movimentação gera dois registros USN, um que registra o diretório pai antigo para o item e outro que registra um novo pai.

A tabela a seguir identifica os possíveis sinalizadores.

Nota Os bits não utilizados são reservados.
 
Valor Significado
USN_REASON_BASIC_INFO_CHANGE
0x00008000
Um usuário alterou um ou mais atributos de arquivo ou diretório (por exemplo, somente leitura, oculto, sistema, arquivo morto ou atributo esparso) ou um ou mais carimbos de data/hora.
USN_REASON_CLOSE
0x80000000
O arquivo ou diretório está fechado.
USN_REASON_COMPRESSION_CHANGE
0x00020000
O estado de compactação do arquivo ou diretório é alterado de ou para compactado.
USN_REASON_DATA_EXTEND
0x00000002
O arquivo ou diretório é estendido (adicionado a).
USN_REASON_DATA_OVERWRITE
0x00000001
Os dados no arquivo ou diretório são substituídos.
USN_REASON_DATA_TRUNCATION
0x00000004
O arquivo ou diretório está truncado.
USN_REASON_EA_CHANGE
0x00000400
O usuário fez uma alteração nos atributos estendidos de um arquivo ou diretório.

Esses atributos do sistema de arquivos NTFS não são acessíveis para aplicativos baseados no Windows.

USN_REASON_ENCRYPTION_CHANGE
0x00040000
O arquivo ou diretório é criptografado ou descriptografado.
USN_REASON_FILE_CREATE
0x00000100
O arquivo ou diretório é criado pela primeira vez.
USN_REASON_FILE_DELETE
0x00000200
O arquivo ou diretório é excluído.
USN_REASON_HARD_LINK_CHANGE
0x00010000
Um link rígido do sistema de arquivos NTFS é adicionado ou removido do arquivo ou diretório.

Um link rígido do sistema de arquivos NTFS, semelhante a um link rígido POSIX, é uma das várias entradas de diretório que veem o mesmo arquivo ou diretório.

USN_REASON_INDEXABLE_CHANGE
0x00004000
Um usuário altera o atributo FILE_ATTRIBUTE_NOT_CONTENT_INDEXED .

Ou seja, o usuário altera o arquivo ou diretório de um em que o conteúdo pode ser indexado para um em que o conteúdo não pode ser indexado ou vice-versa. A indexação de conteúdo permite a pesquisa rápida de dados criando um banco de dados de conteúdo selecionado.

USN_REASON_INTEGRITY_CHANGE
0x00800000
Um usuário alterou o estado do atributo FILE_ATTRIBUTE_INTEGRITY_STREAM para o fluxo fornecido.

No sistema de arquivos ReFS, os fluxos de integridade mantêm uma soma de verificação de todos os dados desse fluxo, para que o conteúdo do arquivo possa ser validado durante operações de leitura ou gravação.

USN_REASON_NAMED_DATA_EXTEND
0x00000020
Um ou mais fluxos de dados nomeados para um arquivo são estendidos (adicionados a).
USN_REASON_NAMED_DATA_OVERWRITE
0x00000010
Os dados em um ou mais fluxos de dados nomeados para um arquivo são substituídos.
USN_REASON_NAMED_DATA_TRUNCATION
0x00000040
Um ou mais fluxos de dados nomeados para um arquivo é truncado.
USN_REASON_OBJECT_ID_CHANGE
0x00080000
O identificador de objeto de um arquivo ou diretório é alterado.
USN_REASON_RENAME_NEW_NAME
0x00002000
Um arquivo ou diretório é renomeado e o nome do arquivo na estrutura USN_RECORD_V4 é o novo nome.
USN_REASON_RENAME_OLD_NAME
0x00001000
O arquivo ou diretório é renomeado e o nome do arquivo na estrutura USN_RECORD_V4 é o nome anterior.
USN_REASON_REPARSE_POINT_CHANGE
0x00100000
O ponto de nova análise contido em um arquivo ou diretório é alterado ou um ponto de nova análise é adicionado ou excluído de um arquivo ou diretório.
USN_REASON_SECURITY_CHANGE
0x00000800
Uma alteração é feita nos direitos de acesso a um arquivo ou diretório.
USN_REASON_STREAM_CHANGE
0x00200000
Um fluxo nomeado é adicionado ou removido de um arquivo ou um fluxo nomeado é renomeado.
USN_REASON_TRANSACTED_CHANGE
0x00400000
O fluxo fornecido é modificado por meio de uma transação TxF confirmada.

SourceInfo

Informações adicionais sobre a origem da alteração, definidas pelo FSCTL_MARK_HANDLE da operação DeviceIoControl .

Quando um thread grava um novo registro USN, os sinalizadores de informações de origem no registro anterior continuam presentes somente se o thread também define esses sinalizadores. Portanto, a estrutura de informações de origem permite que os aplicativos filtrem registros USN definidos apenas por uma fonte conhecida, por exemplo, um filtro antivírus.

Um dos valores a seguir pode ser definido.

Valor Significado
USN_SOURCE_AUXILIARY_DATA
0x00000002
A operação adiciona um fluxo de dados privado a um arquivo ou diretório.

Um exemplo é um detector de vírus adicionando informações de soma de verificação. À medida que o detector de vírus modifica o item, o sistema gera registros USN. USN_SOURCE_AUXILIARY_DATA indica que as modificações não alteraram os dados do aplicativo.

USN_SOURCE_DATA_MANAGEMENT
0x00000001
A operação fornece informações sobre uma alteração no arquivo ou diretório feita pelo sistema operacional.

Um uso típico é quando o sistema de Armazenamento Remoto move dados do armazenamento externo para o local. O Armazenamento Remoto é o software de gerenciamento de armazenamento hierárquico. Esse movimento geralmente, no mínimo, adiciona o sinalizador USN_REASON_DATA_OVERWRITE a um registro usn. No entanto, os dados não foram alterados do ponto de vista do usuário. Observando USN_SOURCE_DATA_MANAGEMENT no membro SourceInfo , você pode determinar que, embora uma operação de gravação seja executada no item, os dados não foram alterados.

USN_SOURCE_REPLICATION_MANAGEMENT
0x00000004
A operação está modificando um arquivo para corresponder ao conteúdo do mesmo arquivo que existe em outro membro do conjunto de réplica.
USN_SOURCE_CLIENT_REPLICATION_MANAGEMENT
0x00000008
A operação está modificando um arquivo em sistemas cliente para corresponder ao conteúdo do mesmo arquivo que existe na nuvem.

RemainingExtents

O número de extensões que permanecem após o registro de USN_RECORD_V4 atual. Vários registros da versão 4.0 podem ser necessários para descrever todas as extensões modificadas de um determinado arquivo. Quando o membro RemainingExtents é 0, o registro de USN_RECORD_V4 atual é o último registro USN_RECORD_V4 para o arquivo. A última entrada de USN_RECORD_V4 para um determinado arquivo é sempre seguida por um registro USN_RECORD_V3 com pelo menos o sinalizador USN_REASON_CLOSE definido.

NumberOfExtents

O número de extensões na entrada de USN_RECORD_V4 atual.

ExtentSize

O tamanho de cada estrutura USN_RECORD_EXTENT no membro Extents , em bytes.

Extents[1]

Uma matriz de estruturas USN_RECORD_EXTENT que representam as extensões na entrada USN_RECORD_V4 .

Comentários

Um registro USN_RECORD_V4 é gerado somente quando o rastreamento de intervalo é ativado e o tamanho do arquivo é igual ou maior que o valor do membro RangeTrackFileSizeThreshold . O usuário sempre recebe um ou mais registros USN_RECORD_V4 seguidos por um registro USN_RECORD_V3 .

Para fornecer uma compatibilidade de encaminhamento de caminho em clientes de diário de alterações, a Microsoft fornece um número de versão principal e secundário do software de diário de alterações na estrutura USN_RECORD_V4 . Seu código deve examinar esses valores, examinar sua própria compatibilidade com o software de diário de alterações e lidar normalmente com qualquer incompatibilidade, se necessário.

Uma alteração no número de versão secundária indica que os membros existentes da estrutura USN_RECORD_V4 ainda são válidos, mas que novos membros podem ter sido adicionados entre o penúltimo membro e o último, que é uma cadeia de caracteres de comprimento variável.

Para lidar com essa alteração normalmente, seu código não deve fazer nenhuma aritmética de ponteiro em tempo de compilação que dependa do local do último membro. Por exemplo, uma alteração no número de versão secundária torna a sizeof(USN_RECORD) chamada não confiável. Em vez disso, dependa de cálculos em tempo de execução que usam o membro RecordLength .

Um aumento no número de versão principal do software de diário de alterações indica que a estrutura de USN_RECORD_V4 pode ter passado por grandes alterações e que a definição atual pode não ser confiável. Se o código detectar uma alteração no número de versão principal do software de diário de alteração, o código não deverá funcionar com o diário de alterações.

Para obter mais informações, consulte Criando, modificando e excluindo um Diário de alteração.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8.1 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2012 R2 [somente aplicativos da área de trabalho]
Cabeçalho winioctl.h (inclua Windows.h)

Confira também

FSCTL_MARK_HANDLE

FSCTL_READ_USN_JOURNAL

FSCTL_USN_TRACK_MODIFIED_RANGES

GetFileAttributes

GetVolumeInformation

READ_USN_JOURNAL_DATA

USN_RECORD_COMMON_HEADER

USN_RECORD_EXTENT

USN_RECORD_V2

USN_RECORD_V3

Estruturas de gerenciamento de volumes