Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
1 Introdução
O sistema de arquivos exFAT é o sucessor de FAT32 na família FAT de sistemas de arquivos. Essa especificação descreve o sistema de arquivos exFAT e fornece todas as informações necessárias para implementar o sistema de arquivos exFAT.
1.1 Metas de design
O sistema de arquivos exFAT tem três metas de design central (veja a lista abaixo).
Manter a simplicidade dos sistemas de arquivos baseados em FAT.
Dois dos pontos fortes dos sistemas de arquivos baseados em FAT são a simplicidade relativa e a facilidade de implementação. No espírito de seus antecessores, os implementadores devem achar o exFAT relativamente simples e fácil de implementar.
Habilitar arquivos muito grandes e dispositivos de armazenamento.
O sistema de arquivos exFAT usa 64 bits para descrever o tamanho do arquivo, permitindo assim aplicativos que dependem de arquivos muito grandes. O sistema de arquivos exFAT também permite clusters de até 32 MB, habilitando efetivamente dispositivos de armazenamento muito grandes.
Incorporar extensibilidade para inovação futura.
O sistema de arquivos exFAT incorpora extensibilidade em seu design, permitindo que o sistema de arquivos acompanhe as inovações no armazenamento e as alterações no uso.
1.2 Terminologia específica
No contexto dessa especificação, determinados termos (consulte Tabela 1) têm um significado específico para o design e a implementação do sistema de arquivos exFAT.
definição de termos da tabela 1 que têm um significado muito específico
de Termos | de definição de |
---|---|
Dever | Essa especificação usa o termo "deve" para descrever um comportamento que é obrigatório. |
Se | Essa especificação usa o termo "deve" para descrever um comportamento que ele recomenda fortemente, mas não torna obrigatório. |
Maio | Essa especificação usa o termo "pode" para descrever um comportamento opcional. |
Obrigatório | Este termo descreve um campo ou estrutura que uma implementação deve modificar e deve interpretar como esta especificação descreve. |
Opcional | Este termo descreve um campo ou estrutura que uma implementação pode ou não dar suporte. Se uma implementação der suporte a um determinado campo ou estrutura opcional, ela será modificada e interpretará o campo ou a estrutura conforme essa especificação descreve. |
Indefinido | Este termo descreve o conteúdo de campo ou estrutura que uma implementação pode modificar conforme necessário (ou seja, limpar para zero ao definir campos ou estruturas ao redor) e não deve interpretar para manter qualquer significado específico. |
Reservado | Este termo descreve o conteúdo de campo ou estrutura que implementa:
|
1.3 Texto completo de acrônimos comuns
Essa especificação usa acrônimos em uso comum no setor de computadores pessoais (consulte Tabela 2).
tabela 2 texto completo de acrônimos comuns
acrônimo | de Texto Completo |
---|---|
ASCII | American Standard Code for Information Interchange |
BIOS | Sistema básico de saída de entrada |
CPU | Unidade de Processamento Central |
exFAT | Tabela de alocação de arquivo extensível |
GORDURA | Tabela de alocação de arquivo |
FAT12 | Tabela de alocação de arquivo, índices de cluster de 12 bits |
FAT16 | Tabela de alocação de arquivo, índices de cluster de 16 bits |
FAT32 | Tabela de alocação de arquivo, índices de cluster de 32 bits |
GPT | Tabela de partição GUID |
GUID | Identificador Global exclusivo (consulte Seção 10.1) |
INT | Interromper |
MBR | Registro de inicialização mestre |
texFAT | ExFAT com segurança de transação |
UTC | Tempo Universal Coordenado |
1.4 Qualificadores de estrutura e campo padrão
Campos e estruturas nessa especificação têm os seguintes qualificadores (confira a lista abaixo), a menos que a especificação observe o contrário.
Não estão assinados
Use a notação decimal para descrever valores, onde não foi observado de outra forma; esta especificação usa a letra pós-correção "h" para indicar números hexadecimal e inclui GUIDs em chaves
Estão no formato little-endian
Não exigir um caractere de terminação nula para cadeias de caracteres
1.5 Windows CE e TexFAT
O TexFAT é uma extensão para exFAT que adiciona semântica operacional segura de transações sobre o sistema de arquivos base. O TexFAT é usado pelo Windows CE. O TexFAT requer o uso das duas FATs e bitmaps de alocação para uso em transações. Ele também define várias estruturas adicionais, incluindo descritores de preenchimento e descritores de segurança.
2 Estrutura de Volume
Um volume é o conjunto de todas as estruturas do sistema de arquivos e espaço de dados necessários para armazenar e recuperar dados do usuário. Todos os volumes exFAT contêm quatro regiões (consulte Tabela 3).
estrutura de volume da tabela 3
nome da sub-região | de deslocamento (setor) |
de tamanho de (setores) |
comentários |
---|---|---|---|
região de inicialização principal | |||
Setor de Inicialização Principal | 0 | 1 | Essa sub-região é obrigatória e seção 3.1 define seu conteúdo. |
Principais setores de inicialização estendida | 1 | oito | Essa sub-região é obrigatória e seção 3.2) define seu conteúdo. |
Principais parâmetros OEM | 9 | 1 | Essa sub-região é obrigatória e seção 3.3 define seu conteúdo. |
Principal Reservado | 10 | 1 | Essa sub-região é obrigatória e seu conteúdo é reservado. |
Soma de verificação de inicialização principal | 11 | 1 | Essa sub-região é obrigatória e seção 3.4 define seu conteúdo. |
região de inicialização de backup | |||
Setor de Inicialização de Backup | 12 | 1 | Essa sub-região é obrigatória e seção 3.1 define seu conteúdo. |
Fazer backup de setores de inicialização estendida | 13 | oito | Essa sub-região é obrigatória e seção 3.2 define seu conteúdo. |
Parâmetros OEM de backup | 21 | 1 | Essa sub-região é obrigatória e seção 3.3 define seu conteúdo. |
Backup Reservado | 22 | 1 | Essa sub-região é obrigatória e seu conteúdo é reservado. |
Soma de verificação de inicialização de backup | vinte e três | 1 | Essa sub-região é obrigatória e seção 3.4 define seu conteúdo. |
de região fat | |||
Alinhamento fat | 24 | FatOffset – 24 | Essa sub-região é obrigatória e seu conteúdo, se houver, é indefinido. Observação: os setores Inicialização Principal e de Backup contêm o campo FatOffset. |
Primeiro FAT | FatOffset | ComprimentoDeGordura | Essa sub-região é obrigatória e seção 4.1 define seu conteúdo. Observação: os setores Inicialização Principal e de Backup contêm os campos FatOffset e FatLength. |
Segunda FAT | DeslocamentoDeGordura + ComprimentoDeGordura | ComprimentoGordura * (NúmeroDeGorduras - 1) | Essa sub-região é obrigatória e seção 4.1 define seu conteúdo, se houver. Observação: os setores Inicialização Principal e de Backup contêm os campos FatOffset, FatLength e NumberOfFats. O campo NumberOfFats pode conter apenas os valores 1 e 2. |
de região de dados | |||
Alinhamento do heap do cluster | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Essa sub-região é obrigatória e seu conteúdo, se houver, é indefinido. Observação: os setores Inicialização Principal e de Backup contêm os campos FatOffset, FatLength, NumberOfFats e ClusterHeapOffset. Os valores válidos do campo NumberOfFats são 1 e 2. |
Cluster Heap | ClusterHeapOffset | ClusterCount * 2SectorsPerClusterShift | Essa sub-região é obrigatória e seção 5.1 define seu conteúdo. Observação: os setores inicialização principal e de backup contêm os campos ClusterHeapOffset, ClusterCount e SectorsPerClusterShift. |
Excesso de espaço | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | Essa sub-região é obrigatória e seu conteúdo, se houver, é indefinido. Observação: os setores Inicialização Principal e de Backup contêm os campos ClusterHeapOffset, ClusterCount, SectorsPerClusterShift e VolumeLength. |
3 Regiões principais e de inicialização de backup
A região inicialização principal fornece todas as instruções de inicialização necessárias, identificando informações e parâmetros do sistema de arquivos para habilitar uma implementação para executar o seguinte:
- Correia de inicialização de um sistema de computador de um volume exFAT.
- Identifique o sistema de arquivos no volume como exFAT.
- Descubra o local das estruturas do sistema de arquivos exFAT.
A região de Inicialização de Backup é um backup da região de Inicialização Principal. Ele ajuda a recuperação do volume exFAT no caso da região de Inicialização Principal estar em um estado inconsistente. Exceto em circunstâncias pouco frequentes, como atualizar instruções de inicialização, as implementações não devem modificar o conteúdo da região de Inicialização de Backup.
3.1 Sub-regiões do setor de inicialização principal e de backup
O Setor de Inicialização Principal contém código para inicialização de um volume exFAT e parâmetros de exFAT fundamentais que descrevem a estrutura de volume (consulte Tabela 4). BIOS, MBR ou outros agentes de inicialização podem inspecionar esse setor e podem carregar e executar as instruções de inicialização contidas nele.
O Setor de Inicialização de Backup é um backup do Setor de Inicialização Principal e tem a mesma estrutura (consulte Tabela 4). O Setor de Inicialização de Backup pode ajudar nas operações de recuperação; no entanto, as implementações devem tratar o conteúdo dos campos VolumeFlags e PercentInUse como obsoletos.
Antes de usar o conteúdo do Setor de Inicialização Principal ou de Backup, as implementações devem verificar seu conteúdo validando sua respectiva Soma de Verificação de Inicialização e garantindo que todos os campos estejam dentro do intervalo de valores válido.
Embora a operação de formato inicialize o conteúdo dos setores inicialização principal e de backup, as implementações podem atualizar esses setores (e também atualizarão sua respectiva Soma de Verificação de Inicialização) conforme necessário. No entanto, as implementações podem atualizar os campos VolumeFlags ou PercentInUse sem atualizar a respectiva Soma de Verificação de Inicialização (a soma de verificação exclui especificamente esses dois campos).
estrutura do setor de inicialização principal e de backup da tabela 4
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
JumpBoot | 0 | 3 | Esse campo é obrigatório e seção 3.1.1 define seu conteúdo. |
NomeDoSistemaDeArquivos | 3 | oito | Esse campo é obrigatório e seção 3.1.2 define seu conteúdo. |
MustBeZero | 11 | 53 | Esse campo é obrigatório e seção 3.1.3 define seu conteúdo. |
Deslocamento de Partição | 64 | oito | Esse campo é obrigatório e seção 3.1.4 define seu conteúdo. |
ComprimentoVolume | Setenta e dois | oito | Esse campo é obrigatório e seção 3.1.5 define seu conteúdo. |
FatOffset | 80 | 4 | Esse campo é obrigatório e seção 3.1.6 define seu conteúdo. |
FatLength | 84 | 4 | Esse campo é obrigatório e seção 3.1.7 define seu conteúdo. |
ClusterHeapOffset | 88 | 4 | Esse campo é obrigatório e seção 3.1.8 define seu conteúdo. |
Contagem de Clusters | 92 | 4 | Esse campo é obrigatório e seção 3.1.9 define seu conteúdo. |
FirstClusterOfRootDirectory | 96 | 4 | Esse campo é obrigatório e seção 3.1.10 define seu conteúdo. |
Número de Série do Volume | 100 | 4 | Esse campo é obrigatório e seção 3.1.11 define seu conteúdo. |
RevisãoDoSistemaDeArquivos | 104 | 2 | Esse campo é obrigatório e seção 3.1.12 define seu conteúdo. |
VolumeFlags | 106 | 2 | Esse campo é obrigatório e seção 3.1.13 define seu conteúdo. |
BytesPerSectorShift | 108 | 1 | Esse campo é obrigatório e seção 3.1.14 define seu conteúdo. |
SectorsPerClusterShift | 109 | 1 | Esse campo é obrigatório e seção 3.1.15 define seu conteúdo. |
NumberOfFats | 110 | 1 | Esse campo é obrigatório e seção 3.1.16 define seu conteúdo. |
DriveSelect | 111 | 1 | Esse campo é obrigatório e seção 3.1.17 define seu conteúdo. |
PercentualEmUso | 112 | 1 | Esse campo é obrigatório e seção 3.1.18 define seu conteúdo. |
Reservado | 113 | 7 | Esse campo é obrigatório e seu conteúdo é reservado. |
Código de Inicialização | 120 | 390 | Esse campo é obrigatório e seção 3.1.19 define seu conteúdo. |
BootSignature | 510 | 2 | Esse campo é obrigatório e seção 3.1.20 define seu conteúdo. |
Excesso de Espaço | 512 | 2BytesPerSectorShift – 512 | Esse campo é obrigatório e seu conteúdo, se houver, é indefinido. Observação: os setores Inicialização Principal e de Backup contêm o campo BytesPerSectorShift. |
3.1.1 Campo JumpBoot
O campo JumpBoot deve conter a instrução de salto para CPUs comuns em computadores pessoais, que, quando executadas, "pula" a CPU para executar as instruções de inicialização no campo BootCode.
O valor válido para esse campo é (em ordem de byte de baixa ordem para byte de alta ordem) EBh 76h 90h.
3.1.2 Campo FileSystemName
O campo FileSystemName deve conter o nome do sistema de arquivos no volume.
O valor válido para esse campo é, em caracteres ASCII, "EXFAT", que inclui três espaços em branco à direita.
3.1.3 Campo MustBeZero
O campo MustBeZero deve corresponder diretamente ao intervalo de bytes que o bloco de parâmetros BIOS embalado consome em volumes FAT12/16/32.
O valor válido para esse campo é 0, o que ajuda a impedir que implementações FAT12/16/32 montem erroneamente um volume exFAT.
Campo PartitionOffset 3.1.4
O campo PartitionOffset deve descrever o deslocamento do setor relativo à mídia da partição que hospeda o volume exFAT fornecido. Esse campo auxilia na inicialização do volume usando INT estendido 13h em computadores pessoais.
Todos os valores possíveis para esse campo são válidos; no entanto, o valor 0 indica que as implementações devem ignorar esse campo.
3.1.5 Campo VolumeLength
O campo VolumeLength deve descrever o tamanho do volume exFAT determinado em setores.
O intervalo válido de valores para este campo deve ser:
Pelo menos 220/2BytesPerSectorShift, o que garante que o menor volume não seja inferior a 1 MB
No máximo 264- 1, o maior valor que esse campo pode descrever.
No entanto, se o tamanho da sub-região de Excesso de Espaço for 0, o maior valor desse campo será ClusterHeapOffset + (232-11) *2SectorsPerClusterShift.
3.1.6 Campo FatOffset
O campo FatOffset deve descrever o deslocamento do setor relativo ao volume do Primeiro FAT. Esse campo permite que as implementações alinhem o Primeiro FAT às características da mídia de armazenamento subjacente.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 24, que contabiliza os setores que as regiões inicialização principal e inicialização de backup consomem
- No máximo, ClusterHeapOffset - (FatLength * NumberOfFats), que contabiliza os setores que o Heap de Cluster consome
3.1.7 Campo FatLength
O campo FatLength deve descrever o comprimento, em setores, de cada tabela FAT (o volume pode conter até duas FATs).
O intervalo válido de valores para este campo deve ser:
- Pelo menos (ClusterCount + 2) * 22/2BytesPerSectorShiftarredondado para o inteiro mais próximo, o que garante que cada FAT tenha espaço suficiente para descrever todos os clusters no Heap de Cluster
- No máximo (ClusterHeapOffset – FatOffset) / NumberOfFats arredondado para baixo até o inteiro mais próximo, o que garante que os FATs existam antes do Heap de Cluster
Esse campo pode conter um valor acima de seu limite inferior (conforme descrito acima) para permitir que o Segundo FAT, se presente, também seja alinhado às características da mídia de armazenamento subjacente. O conteúdo do espaço que excede o que o próprio FAT exige, se houver, é indefinido.
3.1.8 Campo ClusterHeapOffset
O campo ClusterHeapOffset deve descrever o deslocamento do setor relativo ao volume do Heap de Cluster. Esse campo permite que as implementações alinhem o Heap de Cluster às características da mídia de armazenamento subjacente.
O intervalo válido de valores para este campo deve ser:
- Pelo menos FatOffset + FatLength * NumberOfFats, para considerar os setores que todas as regiões anteriores consomem
- No máximo 232- 1 ou VolumeLength - (ClusterCount * 2SectorsPerClusterShift), qualquer cálculo é menor
3.1.9 Campo ClusterCount
O campo ClusterCount deve descrever o número de clusters que o Heap de Cluster contém.
O valor válido para este campo deve ser o menor dos seguintes:
- (VolumeLength – ClusterHeapOffset) / 2SectorsPerClusterShiftarredondado para baixo até o inteiro mais próximo, que é exatamente o número de clusters que podem caber entre o início do Heap de Cluster e o final do volume
- 232- 11, que é o número máximo de clusters que um FAT pode descrever
O valor do campo ClusterCount determina o tamanho mínimo de um FAT. Para evitar FATs extremamente grandes, as implementações podem controlar o número de clusters no Heap de Cluster aumentando o tamanho do cluster (por meio do campo SectorsPerClusterShift). Essa especificação recomenda no máximo 224- 2 clusters no Heap de Cluster. No entanto, as implementações devem ser capazes de lidar com volumes com até 232- 11 clusters no Heap de Cluster.
3.1.10 Campo FirstClusterOfRootDirectory
O campo FirstClusterOfRootDirectory deve conter o índice de cluster do primeiro cluster do diretório raiz. As implementações devem fazer todos os esforços para colocar o primeiro cluster do diretório raiz no primeiro cluster não inválido após os clusters que o Bitmap de Alocação e a Tabela de Maiúsculas e Minúsculas consomem.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 2, o índice do primeiro cluster no Heap de Cluster
- No máximo, ClusterCount + 1, o índice do último cluster no Heap de Cluster
3.1.11 Campo VolumeSerialNumber
O campo VolumeSerialNumber deve conter um número de série exclusivo. Isso ajuda as implementações a distinguir entre diferentes volumes exFAT. As implementações devem gerar o número de série combinando a data e a hora da formatação do volume exFAT. O mecanismo para combinar data e hora para formar um número de série é específico da implementação.
Todos os valores possíveis para esse campo são válidos.
3.1.12 Campo FileSystemRevision
O campo FileSystemRevision deve descrever os números de revisão principais e secundários das estruturas exFAT no volume especificado.
O byte de alta ordem é o número de revisão principal e o byte de baixa ordem é o número de revisão menor. Por exemplo, se o byte de alta ordem contiver o valor 01h e se o byte de ordem baixa contiver o valor 05h, o campo FileSystemRevision descreverá o número de revisão 1,05. Da mesma forma, se o byte de alta ordem contiver o valor 0Ah e se o byte de ordem baixa contiver o valor 0Fh, o campo FileSystemRevision descreverá o número de revisão 10.15.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 0 para o byte de ordem baixa e 1 para o byte de alta ordem
- No máximo 99 para o byte de ordem baixa e 99 para o byte de alta ordem
O número de revisão do exFAT que essa especificação descreve é 1,00. As implementações dessa especificação devem montar qualquer volume exFAT com o número de revisão principal 1 e não devem montar nenhum volume exFAT com qualquer outro número de revisão principal. As implementações devem respeitar o número de revisão secundário e não devem executar operações ou criar estruturas do sistema de arquivos não descritas na especificação correspondente do número de revisão menor.
3.1.13 Campo VolumeFlags
O campo VolumeFlags deve conter sinalizadores que indicam o status de várias estruturas do sistema de arquivos no volume exFAT (consulte Tabela 5).
As implementações não devem incluir esse campo ao calcular sua respectiva soma de verificação da região inicialização principal ou de inicialização de backup. Ao se referir ao Setor de Inicialização de Backup, as implementações devem tratar esse campo como obsoleto.
Estrutura de campo Tabela 5 VolumeFlags
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
ActiveFat | 0 | 1 | Esse campo é obrigatório e seção 3.1.13.1 define seu conteúdo. |
VolumeDirty | 1 | 1 | Esse campo é obrigatório e seção 3.1.13.2 define seu conteúdo. |
MediaFailure | 2 | 1 | Esse campo é obrigatório e seção 3.1.13.3 define seu conteúdo. |
ClearToZero | 3 | 1 | Esse campo é obrigatório e seção 3.1.13.4 define seu conteúdo. |
Reservado | 4 | 12 | Esse campo é obrigatório e seu conteúdo é reservado. |
3.1.13.1 Campo ActiveFat
O campo ActiveFat deve descrever qual FAT e Bitmap de Alocação estão ativos (e as implementações devem ser usadas), da seguinte maneira:
- 0, o que significa que o Primeiro FAT e o Primeiro Bitmap de Alocação estão ativos
- 1, o que significa que o Segundo FAT e o Bitmap de Segunda Alocação estão ativos e só é possível quando o campo NumberOfFats contém o valor 2
As implementações devem considerar o FAT inativo e o Bitmap de Alocação como obsoletos. Somente implementações com reconhecimento de TexFAT devem alternar os Bitmaps fat e de alocação ativos (consulte Seção 7.1).
3.1.13.2 Campo VolumeDirty
O campo VolumeDirty deve descrever se o volume está sujo ou não, da seguinte maneira:
- 0, o que significa que o volume provavelmente está em um estado consistente
- 1, o que significa que o volume provavelmente está em um estado inconsistente
As implementações devem definir o valor desse campo como 1 ao encontrar inconsistências de metadados do sistema de arquivos que eles não resolvem. Se, ao montar um volume, o valor desse campo for 1, somente as implementações que resolvem inconsistências de metadados do sistema de arquivos poderão limpar o valor desse campo como 0. Essas implementações só limparão o valor desse campo para 0 depois de garantir que o sistema de arquivos esteja em um estado consistente.
Se, ao montar um volume, o valor desse campo for 0, as implementações deverão definir esse campo como 1 antes de atualizar os metadados do sistema de arquivos e desmarcar esse campo para 0 posteriormente, semelhante à ordenação de gravação recomendada descrita no Seção 8.1.
3.1.13.3 Campo MediaFailure
O campo MediaFailure deve descrever se uma implementação descobriu falhas de mídia ou não, da seguinte maneira:
- 0, o que significa que a mídia de hospedagem não relatou falhas ou quaisquer falhas conhecidas já estão registradas no FAT como clusters "ruins"
- 1, o que significa que a mídia de hospedagem relatou falhas (ou seja, falhou nas operações de leitura ou gravação)
Uma implementação deve definir esse campo como 1 quando:
- A mídia de hospedagem falha ao acessar tentativas de qualquer região no volume
- A implementação esgotou os algoritmos de repetição de acesso, se houver
Se, ao montar um volume, o valor desse campo for 1, as implementações que verificam todo o volume para falhas de mídia e registram todas as falhas como clusters "ruins" no FAT (ou resolvem falhas de mídia) podem limpar o valor desse campo como 0.
3.1.13.4 Campo ClearToZero
O campo ClearToZero não tem significado significativo nesta especificação.
Os valores válidos para este campo são:
- 0, que não tem nenhum significado específico
- 1, o que significa que as implementações devem limpar esse campo para 0 antes de modificar quaisquer estruturas, diretórios ou arquivos do sistema de arquivos
3.1.14 Campo BytesPerSectorShift
O campo BytesPerSectorShift deve descrever os bytes por setor expressos como log2(N), em que N é o número de bytes por setor. Por exemplo, para 512 bytes por setor, o valor desse campo é 9.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 9 (tamanho do setor de 512 bytes), que é o menor setor possível para um volume exFAT
- No máximo 12 (tamanho do setor de 4096 bytes), que é o tamanho da página de memória de CPUs comuns em computadores pessoais
3.1.15 Campo SectorsPerClusterShift
O campo SectorsPerClusterShift deve descrever os setores por cluster expressos como log2(N), em que N é o número de setores por cluster. Por exemplo, para 8 setores por cluster, o valor desse campo é 3.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 0 (1 setor por cluster), que é o menor cluster possível
- No máximo 25 – BytesPerSectorShift, que é avaliado como um tamanho de cluster de 32 MB
3.1.16 Campo NumberOfFats
O campo NumberOfFats deve descrever o número de FATs e Bitmaps de alocação que o volume contém.
O intervalo válido de valores para este campo deve ser:
- 1, que indica que o volume contém apenas o Primeiro FAT e o Primeiro Bitmap de Alocação
- 2, que indica que o volume contém o Primeiro FAT, o Segundo FAT, o Primeiro Bitmap de Alocação e o Segundo Bitmap de Alocação; esse valor só é válido para volumes TexFAT
3.1.17 Campo DriveSelect
O campo DriveSelect deve conter o número estendido da unidade INT 13h, que auxilia a inicialização desse volume usando INT 13h estendida em computadores pessoais.
Todos os valores possíveis para esse campo são válidos. Campos semelhantes em sistemas de arquivos baseados em FAT anteriores frequentemente continham o valor 80h.
3.1.18 Campo PercentInUse
O campo PercentInUse deve descrever a porcentagem de clusters no Heap de Cluster que são alocados.
O intervalo válido de valores para este campo deve ser:
- Entre 0 e 100, inclusive, que é o percentual de clusters alocados no Heap de Cluster, arredondado para baixo para o inteiro mais próximo
- Exatamente FFh, que indica que o percentual de clusters alocados no Heap de Cluster não está disponível
As implementações devem alterar o valor desse campo para refletir as alterações na alocação de clusters no Heap de Cluster ou alterá-lo para FFh.
As implementações não devem incluir esse campo ao calcular sua respectiva soma de verificação da região inicialização principal ou de inicialização de backup. Ao se referir ao Setor de Inicialização de Backup, as implementações devem tratar esse campo como obsoleto.
Campo BootCode 3.1.19
O campo BootCode deve conter instruções de inicialização. As implementações podem preencher esse campo com as instruções de CPU necessárias para a inicialização de um sistema de computador. As implementações que não fornecem instruções de inicialização devem inicializar cada byte neste campo para F4h (a instrução de parada para CPUs comuns em computadores pessoais) como parte de sua operação de formato.
3.1.20 Campo BootSignature
O campo BootSignature deve descrever se a intenção de um determinado setor é que ele seja um Setor de Inicialização ou não.
O valor válido para esse campo é AA55h. Qualquer outro valor nesse campo invalida seu respectivo Setor de Inicialização. As implementações devem verificar o conteúdo desse campo antes de depender de qualquer outro campo em seu respectivo Setor de Inicialização.
3.2 Sub-regiões principais e de backup de setores de inicialização estendida
Cada setor dos principais setores de inicialização estendida tem a mesma estrutura; no entanto, cada setor pode conter instruções de inicialização distintas (consulte a Tabela 6). Agentes de inicialização, como as instruções de inicialização no Setor de Inicialização Principal, implementações alternativas do BIOS ou firmware de um sistema inserido, podem carregar esses setores e executar as instruções que contêm.
Os Setores de Inicialização Estendida de Backup são um backup dos principais setores de inicialização estendida e têm a mesma estrutura (consulte Tabela 6).
Antes de executar as instruções dos Setores de Inicialização Estendida principal ou de backup, as implementações devem verificar seu conteúdo garantindo que o campo ExtendedBootSignature de cada setor contenha seu valor prescrito.
Embora a operação de formato inicialize o conteúdo dos setores inicialização estendida principal e de backup, as implementações podem atualizar esses setores (e também atualizarão sua respectiva Soma de Verificação de Inicialização) conforme necessário.
Estrutura do setor de inicialização estendida Tabela 6
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Esse campo é obrigatório e seção 3.2.1 define seu conteúdo. Observação: os setores Inicialização Principal e de Backup contêm o campo BytesPerSectorShift. |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | Esse campo é obrigatório e seção 3.2.2 define seu conteúdo. Observação: os setores Inicialização Principal e de Backup contêm o campo BytesPerSectorShift. |
3.2.1 Campo ExtendedBootCode
O campo ExtendedBootCode deve conter instruções de inicialização. As implementações podem preencher esse campo com as instruções de CPU necessárias para a inicialização de um sistema de computador. As implementações que não fornecem instruções de inicialização devem inicializar cada byte neste campo para 00h como parte de sua operação de formato.
3.2.2 Campo ExtendedBootSignature
O campo ExtendedBootSignature deve descrever se a intenção de determinado setor é que ele seja um Setor de Inicialização Estendida ou não.
O valor válido para esse campo é AA550000h. Qualquer outro valor nesse campo invalida seu respectivo Setor de Inicialização Estendida principal ou de backup. As implementações devem verificar o conteúdo desse campo antes de depender de qualquer outro campo em seu respectivo Setor de Inicialização Estendida.
3.3 Sub-regiões principais e de backup de parâmetros OEM
A sub-região de Parâmetros OEM Principais contém dez estruturas de parâmetros que podem conter informações específicas do fabricante (consulte Tabela 7). Cada uma das dez estruturas de parâmetros deriva do modelo de Parâmetros Genéricos (consulte Seção 3.3.2). Os fabricantes podem derivar suas próprias estruturas de parâmetros personalizados do modelo de Parâmetros Genéricos. Essa especificação em si define duas estruturas de parâmetros: Parâmetros Nulos (consulte Seção 3.3.3) e Parâmetros Flash (consulte Seção 3.3.4).
Os Parâmetros OEM de Backup são um backup dos parâmetros OEM principais e têm a mesma estrutura (consulte Tabela 7).
Antes de usar o conteúdo dos Parâmetros OEM principal ou de backup, as implementações devem verificar seu conteúdo validando sua respectiva Soma de Verificação de Inicialização.
Os fabricantes devem preencher os parâmetros OEM principal e de backup com suas próprias estruturas de parâmetros personalizados, se houver, e quaisquer outras estruturas de parâmetro. As operações de formato subsequentes devem preservar o conteúdo dos Parâmetros OEM principal e de backup.
As implementações podem atualizar os parâmetros OEM principal e de backup conforme necessário (e também atualizarão sua respectiva soma de verificação de inicialização).
Estrutura de parâmetros OEM da tabela 7
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
Parâmetros[0] | 0 | 48 | Esse campo é obrigatório e seção 3.3.1 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
Parâmetros[9] | 432 | 48 | Esse campo é obrigatório e seção 3.3.1 define seu conteúdo. |
Reservado | 480 | 2BytesPerSectorShift – 480 | Esse campo é obrigatório e seu conteúdo é reservado. Observação: os setores Inicialização Principal e de Backup contêm o campo BytesPerSectorShift. |
3.3.1 Parâmetros[0] ... Parâmetros[9]
Cada campo Parâmetros nessa matriz contém uma estrutura de parâmetros, que deriva do modelo de Parâmetros Genéricos (consulte Seção 3.3.2). Qualquer campo Parâmetros não utilizados deve ser descrito como contendo uma estrutura de Parâmetros Nulos (consulte Seção 3.3.3).
Modelo de parâmetros genéricos 3.3.2
O modelo de Parâmetros Genéricos fornece a definição base de uma estrutura de parâmetros (consulte Tabela 8). Todas as estruturas de parâmetros derivam desse modelo. O suporte para este modelo de Parâmetros Genéricos é obrigatório.
Modelo de parâmetros genéricos da tabela 8
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
ParametersGUID | 0 | 16 | Esse campo é obrigatório e seção 3.3.2.1 define seu conteúdo. |
Definido Personalizadamente | 16 | 32 | Esse campo é obrigatório e as estruturas derivadas desse modelo definem seu conteúdo. |
Campo ParametersGuid 3.3.2.1
O campo ParametersGuid deve descrever um GUID, que determina o layout do restante da estrutura de parâmetros fornecida.
Todos os valores possíveis para esse campo são válidos; no entanto, os fabricantes devem usar uma ferramenta de geração de GUID, como GuidGen.exe, para selecionar um GUID ao derivar estruturas de parâmetros personalizados desse modelo.
3.3.3 Parâmetros nulos
A estrutura Parâmetros Nulos deriva do modelo de Parâmetros Genéricos (consulte Seção 3.3.2) e deve descrever um campo Parâmetros não utilizados (consulte Tabela 9). Ao criar ou atualizar a estrutura de Parâmetros OEM, as implementações devem preencher campos parâmetros não utilizados com a estrutura Parâmetros Nulos. Além disso, ao criar ou atualizar a estrutura de Parâmetros OEM, as implementações devem consolidar estruturas de Parâmetros Nulos no final da matriz, deixando assim todas as outras estruturas de Parâmetros no início da estrutura de Parâmetros OEM.
O suporte para a estrutura parâmetros nulos é obrigatório.
estrutura de parâmetros nulos tabela 9
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
ParametersGuid | 0 | 16 | Esse campo é obrigatório e seção 3.3.3.1 define seu conteúdo. |
Reservado | 16 | 32 | Esse campo é obrigatório e seu conteúdo é reservado. |
Campo ParametersGuid 3.3.3.1
O campo ParametersGuid deve estar em conformidade com a definição fornecida pelo modelo de Parâmetros Genéricos (consulte Seção 3.3.2.1).
O valor válido para esse campo, na notação GUID, é {00000000-0000-0000-0000-000000000000}.
3.3.4 Parâmetros flash
A estrutura do Parâmetro Flash deriva do modelo de Parâmetros Genéricos (consulte Seção 3.3.2) e contém parâmetros para mídia flash (consulte Tabela 10). Os fabricantes de dispositivos de armazenamento baseados em flash podem preencher um campo Parâmetros (preferencialmente o campo Parâmetros[0]) com essa estrutura de parâmetros. As implementações podem usar as informações na estrutura de Parâmetros Flash para otimizar as operações de acesso durante leituras/gravações e para o alinhamento das estruturas do sistema de arquivos durante a formatação da mídia.
O suporte para a estrutura de Parâmetros Flash é opcional.
Estrutura de parâmetros flash tabela 10
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
ParametersGuid | 0 | 16 | Esse campo é obrigatório e seção 3.3.4.1 define seu conteúdo. |
EraseBlockSize | 16 | 4 | Esse campo é obrigatório e seção 3.3.4.2 define seu conteúdo. |
Pagesize | 20 | 4 | Esse campo é obrigatório e seção 3.3.4.3 define seu conteúdo. |
SpareSectors | 24 | 4 | Esse campo é obrigatório e seção 3.3.4.4 define seu conteúdo. |
TempoDeAcessoAleatório | 28 | 4 | Esse campo é obrigatório e seção 3.3.4.5 define seu conteúdo. |
Tempo de Programação | 32 | 4 | Esse campo é obrigatório e seção 3.3.4.6 define seu conteúdo. |
ReadCycle | 36 | 4 | Esse campo é obrigatório e seção 3.3.4.7 define seu conteúdo. |
WriteCycle | 40 | 4 | Esse campo é obrigatório e seção 3.3.4.8 define seu conteúdo. |
Reservado | 44 | 4 | Esse campo é obrigatório e seu conteúdo é reservado. |
Todos os valores possíveis para todos os campos de Parâmetros Flash, exceto para o campo ParametersGuid, são válidos. No entanto, o valor 0 indica que o campo não tem sentido (as implementações devem ignorar o campo fornecido).
Campo ParametersGuid 3.3.4.1
O campo ParametersGuid deve estar em conformidade com a definição fornecida no modelo de Parâmetros Genéricos (consulte Seção 3.3.2.1).
O valor válido para esse campo, na notação GUID, é {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
Campo EraseBlockSize 3.3.4.2
O campo EraseBlockSize deve descrever o tamanho, em bytes, do bloco de apagamento da mídia flash.
3.3.4.3 Campo Tamanho de Página
O campo PageSize deve descrever o tamanho, em bytes da página da mídia flash.
3.3.4.4 Campo SpareSectors
O campo SpareSectors deve descrever o número de setores que a mídia flash tem disponível para suas operações internas de moderação.
3.3.4.5 Campo RandomAccessTime
O campo RandomAccessTime deve descrever o tempo médio de acesso aleatório da mídia flash, em nanossegundos.
3.3.4.6 Campo ProgrammingTime
O campo ProgrammingTime deve descrever o tempo médio de programação da mídia flash, em nanossegundos.
3.3.4.7 Campo ReadCycle
O campo ReadCycle deve descrever o tempo médio do ciclo de leitura da mídia flash, em nanossegundos.
Campo WriteCycle 3.3.4.8
O campo WriteCycle deve descrever o tempo médio do ciclo de gravação, em nanossegundos.
3.4 Sub-regiões principais e de soma de verificação de inicialização de backup
As somas de verificação de inicialização principal e de backup contêm um padrão repetido da soma de verificação de quatro bytes do conteúdo de todas as outras sub-regiões em suas respectivas regiões de inicialização. O cálculo de soma de verificação não deve incluir os campos VolumeFlags e PercentInUse em seu respectivo Setor de Inicialização (consulte Figura 1). O padrão de repetição da soma de verificação de quatro bytes preenche sua respectiva sub-região de Soma de Verificação de Inicialização do início ao final da sub-região.
Antes de usar o conteúdo de qualquer uma das outras sub-regiões nas regiões Principal ou Inicialização de Backup, as implementações devem verificar seu conteúdo validando sua respectiva Soma de Verificação de Inicialização.
Embora a operação de formato inicial preencha as somas de verificação principal e de inicialização de backup com o padrão de soma de verificação recorrente, as implementações devem atualizar esses setores à medida que o conteúdo dos outros setores em suas respectivas regiões de Inicialização for alterado.
de Computação de Soma de Verificação de Inicialização da Figura 1 do
UInt32 BootChecksum
(
UCHAR * Sectors, // points to an in-memory copy of the 11 sectors
USHORT BytesPerSector
)
{
UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
UInt32 Checksum = 0;
UInt32 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 106) || (Index == 107) || (Index == 112))
{
continue;
}
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
}
return Checksum;
}
4 Região da Tabela de Alocação de Arquivos
A região fat (Tabela de Alocação de Arquivos) pode conter até duas FATs, uma na primeira sub-região FAT e outra na segunda sub-região FAT. O campo NumberOfFats descreve quantas FATs essa região contém. Os valores válidos para o campo NumberOfFats são 1 e 2. Portanto, a primeira sub-região FAT sempre contém um FAT. Se o campo NumberOfFats for dois, a segunda sub-região FAT também conterá um FAT.
O campo ActiveFat do campo VolumeFlags descreve qual FAT está ativo. Somente o campo VolumeFlags no Setor de Inicialização Principal é atual. As implementações devem tratar a FAT que não está ativa como obsoleta. O uso do FAT inativo e a alternância entre FATs é específico para a implementação.
4.1 Primeira e Segunda Sub-regiões FAT
Um FAT deve descrever cadeias de cluster no Heap de Cluster (consulte Tabela 11). Uma cadeia de clusters é uma série de clusters que fornece espaço para gravar o conteúdo de arquivos, diretórios e outras estruturas do sistema de arquivos. Um FAT representa uma cadeia de clusters como uma lista vinculada de índices de cluster. Com exceção das duas primeiras entradas, cada entrada em um FAT representa exatamente um cluster.
estrutura da tabela de alocação de arquivos Tabela 11
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
FatEntry[0] | 0 | 4 | Esse campo é obrigatório e seção 4.1.1 define seu conteúdo. |
FatEntry[1] | 4 | 4 | Esse campo é obrigatório e seção 4.1.2 define seu conteúdo. |
FatEntry[2] | oito | 4 | Esse campo é obrigatório e seção 4.1.3 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Esse campo é obrigatório e seção 4.1.3 define seu conteúdo. ClusterCount + 1 nunca pode exceder FFFFFFF6h. Observação: os setores Principal e inicialização de backup contêm o campo ClusterCount. |
Excesso de Espaço | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Esse campo é obrigatório e seu conteúdo, se houver, é indefinido. Observação: os setores Inicialização Principal e de Backup contêm os campos ClusterCount, FatLength e BytesPerSectorShift. |
4.1.1 FatEntry[0] Campo
O campo FatEntry[0] deve descrever o tipo de mídia no primeiro byte (o byte de ordem mais baixo) e deve conter FFh nos três bytes restantes.
O tipo de mídia (o primeiro byte) deve ser F8h.
4.1.2 FatEntry[1] Campo
O campo FatEntry[1] só existe devido à precedência histórica e não descreve nada de interesse.
O valor válido para esse campo é FFFFFFFFh. As implementações devem inicializar esse campo para seu valor prescrito e não devem usar esse campo para nenhuma finalidade. As implementações não devem interpretar esse campo e devem preservar seu conteúdo entre operações que modificam campos ao redor.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Campos
Cada campo FatEntry nesta matriz deve representar um cluster no Heap de Cluster. FatEntry[2] representa o primeiro cluster no Heap de Cluster e FatEntry[ClusterCount+1] representa o último cluster no Heap de Cluster.
O intervalo válido de valores para esses campos deve ser:
- Entre 2 e ClusterCount + 1, inclusive, que aponta para a próxima FatEntry na cadeia de cluster fornecida; a FatEntry fornecida não deve apontar para qualquer FatEntry que a precede na cadeia de cluster fornecida
- Exatamente FFFFFFF7h, que marca o cluster correspondente do FatEntry como "ruim"
- Exatamente FFFFFFFFh, que marca o cluster correspondente do FatEntry como o último cluster de uma cadeia de cluster; este é o único valor válido para a última FatEntry de qualquer cadeia de cluster determinada
5 Região de Dados
A região de dados contém o Heap de Cluster, que fornece espaço gerenciado para estruturas, diretórios e arquivos do sistema de arquivos.
Sub-região do Heap de Cluster 5.1
A estrutura do Heap de Cluster é muito simples (consulte Tabela 12); cada série consecutiva de setores descreve um cluster, como define o campo SectorsPerClusterShift. É importante ressaltar que o primeiro cluster do Heap de Cluster tem o índice dois, que corresponde diretamente ao índice de FatEntry[2].
Em um volume exFAT, um Bitmap de Alocação (consulte Seção 7.1.5) mantém o registro do estado de alocação de todos os clusters. Essa é uma diferença significativa em relação aos antecessores do exFAT (FAT12, FAT16 e FAT32), nos quais um FAT manteve um registro do estado de alocação de todos os clusters no Heap de Cluster.
estrutura de heap de cluster da Tabela 12
nome do campo | de deslocamento (setor) |
de tamanho de (setores) |
comentários |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SetoresPorClusterShift | Esse campo é obrigatório e seção 5.1.1 define seu conteúdo. Observação: os setores inicialização principal e de backup contêm os campos ClusterHeapOffset e SectorsPerClusterShift. |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2SectorsPerClusterShift | Esse campo é obrigatório e seção 5.1.1 define seu conteúdo. Observação: os setores inicialização principal e de backup contêm os campos ClusterCount, ClusterHeapOffset e SectorsPerClusterShift. |
5.1.1 Cluster[2] ... Campos cluster[ClusterCount+1]
Cada campo cluster nessa matriz é uma série de setores contíguos, cujo tamanho é definido pelo campo SectorsPerClusterShift.
6 Estrutura de Diretório
O sistema de arquivos exFAT usa uma abordagem de árvore de diretório para gerenciar as estruturas e arquivos do sistema de arquivos que existem no Heap de Cluster. Os diretórios têm uma relação um-para-muitos entre pai e filho na árvore de diretórios.
O diretório ao qual o campo FirstClusterOfRootDirectory se refere é a raiz da árvore de diretório. Todos os outros diretórios são descendentes do diretório raiz de forma vinculada.
Cada diretório consiste em uma série de entradas de diretório (consulte Tabela 13).
Uma ou mais entradas de diretório são combinadas em um conjunto de entradas de diretório que descreve algo de interesse, como uma estrutura do sistema de arquivos, subdiretório ou arquivo.
estrutura do diretório Tabela 13
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Esse campo é obrigatório e seção 6.1 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | Esse campo é obrigatório e seção 6.1 define seu conteúdo. N, o número de campos DirectoryEntry, é o tamanho, em bytes, da cadeia de cluster que contém o diretório determinado, dividido pelo tamanho de um campo DirectoryEntry, 32 bytes. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Cada campo DirectoryEntry nesta matriz deriva do modelo Generic DirectoryEntry (consulte Seção 6.2).
6.2 Modelo de DirectoryEntry Genérico
O modelo Generic DirectoryEntry fornece a definição base para entradas de diretório (consulte Tabela 14). Todas as estruturas de entrada de diretório derivam desse modelo e somente as estruturas de entrada de diretório definidas pela Microsoft são válidas (o exFAT não tem provisionamentos para estruturas de entrada de diretório definidas pelo fabricante, exceto conforme definido em seção 7.8 e Seção 7.9). A capacidade de interpretar o modelo Generic DirectoryEntry é obrigatória.
Modelo de DirectoryEntry Genérico da Tabela 14
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 6.2.1 define seu conteúdo. |
Definido Personalizadamente | 1 | 19 | Esse campo é obrigatório e as estruturas derivadas desse modelo podem definir seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 6.2.2 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 6.2.3 define seu conteúdo. |
Campo EntryType 6.2.1
O campo EntryType tem três modos de uso que o valor do campo define (veja a lista abaixo).
- 00h, que é um marcador de fim de diretório e as seguintes condições se aplicam:
- Todos os outros campos no DirectoryEntry especificado são, na verdade, reservados
- Todas as entradas de diretório subsequentes no diretório especificado também são marcadores de fim de diretório
- Marcadores de fim de diretório só são válidos fora dos conjuntos de entrada de diretório
- As implementações podem substituir marcadores de fim de diretório conforme necessário
- Entre 01h e 7Fh incluídos, que servem como um marcador de entrada de diretório não utilizado, aplicam-se as seguintes condições:
- Todos os outros campos no DirectoryEntry especificado são, na verdade, indefinidos
- Entradas de diretório não utilizados só são válidas fora dos conjuntos de entrada de diretório
- As implementações podem substituir entradas de diretório não usadas conforme necessário
- Esse intervalo de valores corresponde ao campo InUse (consulte Seção 6.2.1.4) que contém o valor 0
- Entre 81h e FFh, inclusive, que é uma entrada de diretório regular, aplicam-se as seguintes condições:
- O conteúdo do campo EntryType (consulte Tabela 15) determina o layout do restante da estrutura DirectoryEntry
- Esse intervalo de valores e somente esse intervalo de valores são válidos dentro de um conjunto de entradas de diretório
- Esse intervalo de valores corresponde diretamente ao campo InUse (consulte Seção 6.2.1.4) que contém o valor 1
Para evitar modificações no campo InUse (consulte Seção 6.2.1.4) resultando erroneamente em um marcador de fim de diretório, o valor 80h é inválido.
estrutura de campo EntryType genérica da tabela 15
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
TypeCode | 0 | 5 | Esse campo é obrigatório e seção 6.2.1.1 define seu conteúdo. |
TipoImportância | 5 | 1 | Esse campo é obrigatório e a Seção Seção 6.2.1.2 define seu conteúdo. |
CategoriaTipo | 6 | 1 | Esse campo é obrigatório e seção 6.2.1.3 define seu conteúdo. |
InUse | 7 | 1 | Esse campo é obrigatório e seção 6.2.1.4 define seu conteúdo. |
Campo TypeCode 6.2.1.1
O campo TypeCode descreve parcialmente o tipo específico da entrada de diretório fornecida. Este campo, além dos campos TypeImportance e TypeCategory (consulte Seção 6.2.1.2 e Seção 6.2.1.3, respectivamente) identifica exclusivamente o tipo da entrada de diretório fornecida.
Todos os valores possíveis desse campo são válidos, a menos que os campos TypeImportance e TypeCategory contenham o valor 0; nesse caso, o valor 0 é inválido para esse campo.
Campo TypeImportance 6.2.1.2
O campo TypeImportance deve descrever a importância da entrada de diretório fornecida.
Os valores válidos para este campo devem ser:
- 0, o que significa que a entrada de diretório fornecida é crítica (consulte Seção 6.3.1.2.1 e Seção 6.4.1.2.1 para entradas críticas de diretório primário e crítico secundário, respectivamente)
- 1, o que significa que a entrada de diretório fornecida é benigna (consulte Seção 6.3.1.2.2 e Seção 6.4.1.2.2 para entradas benignas de diretório primário e benigno, respectivamente)
Campo TypeCategory 6.2.1.3
O campo TypeCategory deve descrever a categoria da entrada de diretório fornecida.
Os valores válidos para este campo devem ser:
- 0, o que significa que a entrada de diretório fornecida é primária (consulte Seção 6.3)
- 1, o que significa que a entrada de diretório fornecida é secundária (consulte Seção 6.4)
Campo InUse 6.2.1.4
O campo InUse deve descrever se a entrada de diretório fornecida em uso ou não.
Os valores válidos para este campo devem ser:
- 0, o que significa que a entrada de diretório fornecida não está em uso; isso significa que a estrutura fornecida é, na verdade, uma entrada de diretório não utilizado
- 1, o que significa que a entrada de diretório fornecida está em uso; isso significa que a estrutura fornecida é uma entrada de diretório regular
Campo FirstCluster 6.2.2
O campo FirstCluster deve conter o índice do primeiro cluster de uma alocação no Heap de Cluster associado à entrada de diretório fornecida.
O intervalo válido de valores para este campo deve ser:
- Exatamente 0, o que significa que não existe nenhuma alocação de cluster
- Entre 2 e ClusterCount + 1, que é o intervalo de índices de cluster válidos
As estruturas derivadas desse modelo poderão redefinir os campos FirstCluster e DataLength, se uma alocação de cluster não for compatível com a estrutura derivada.
6.2.3 Campo DataLength
O campo DataLength descreve o tamanho, em bytes, dos dados que a alocação de cluster associada contém.
O intervalo de valor válido para este campo é:
- Pelo menos 0; se o campo FirstCluster contiver o valor 0, o único valor válido desse campo será 0
- No máximo, ClusterCount * 2SectorsPerClusterShift* 2BytesPerSectorShift
Estruturas que derivam desse modelo podem redefinir os campos FirstCluster e DataLength, se uma alocação de cluster não for possível para a estrutura derivada.
6.3 Modelo de DirectoryEntry Primário Genérico
A primeira entrada de diretório em um conjunto de entradas de diretório deve ser uma entrada de diretório primário. Todas as entradas de diretório subsequentes, se houver, no conjunto de entradas do diretório deverão ser entradas de diretório secundário (consulte Seção 6.4).
A capacidade de interpretar o modelo de DirectoryEntry Primário Genérico é obrigatória.
Todas as estruturas de entrada de diretório primário derivam do modelo Generic Primary DirectoryEntry (consulte Tabela 16), que deriva do modelo Generic DirectoryEntry (consulte Seção 6.2).
Modelo de DirectoryEntry Primário Genérico Tabela 16
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 6.3.1 define seu conteúdo. |
SecondaryCount | 1 | 1 | Esse campo é obrigatório e seção 6.3.2 define seu conteúdo. |
SetChecksum | 2 | 2 | Esse campo é obrigatório e seção 6.3.3 define seu conteúdo. |
GeneralPrimaryFlags | 4 | 2 | Esse campo é obrigatório e seção 6.3.4 define seu conteúdo. |
Definido Personalizadamente | 6 | 14 | Esse campo é obrigatório e as estruturas derivadas desse modelo definem seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 6.3.5 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 6.3.6 define seu conteúdo. |
Campo EntryType 6.3.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1).
Campo TypeCode 6.3.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.1).
Campo TypeImportance 6.3.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.2).
6.3.1.2.1 Entradas críticas do diretório primário
As entradas críticas do diretório primário contêm informações que são essenciais para o gerenciamento adequado de um volume exFAT. Somente o diretório raiz contém entradas críticas de diretório primário (entradas de diretório de arquivo são uma exceção, consulte Seção 7.4).
A definição de entradas críticas do diretório primário correlaciona-se ao número de revisão do exFAT principal. As implementações devem dar suporte a todas as entradas críticas do diretório primário e devem registrar apenas as estruturas de entrada de diretório primário críticas que essa especificação define.
6.3.1.2.2 Entradas benignas do diretório primário
As entradas benignas do diretório primário contêm informações adicionais que podem ser úteis para gerenciar um volume exFAT. Qualquer diretório pode conter entradas benignas de diretório primário.
A definição de entradas benignas do diretório primário correlaciona-se ao número de revisão do exFAT secundário. O suporte para qualquer entrada benigna do diretório primário que essa especificação, ou qualquer especificação subsequente, define é opcional. Uma entrada de diretório primário benigna não reconhecida renderiza toda a entrada de diretório definida como não reconhecida (além da definição dos modelos de entrada de diretório aplicáveis).
Campo TypeCategory 6.3.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.3).
Para este modelo, o valor válido para este campo será 0.
Campo InUse 6.3.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.4).
6.3.2 Campo SecondaryCount
O campo SecondaryCount deve descrever o número de entradas de diretório secundário que imediatamente seguem a entrada de diretório primário fornecida. Essas entradas de diretório secundário, juntamente com a entrada de diretório primário fornecida, compõem o conjunto de entradas de diretório.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 0, o que significa que essa entrada de diretório primário é a única entrada no conjunto de entradas do diretório
- No máximo 255, o que significa que as próximas 255 entradas de diretório e essa entrada de diretório primário compõem o conjunto de entradas de diretório
Estruturas críticas de entrada de diretório primário que derivam desse modelo podem redefinir os campos SecondaryCount e SetChecksum.
6.3.3 Campo SetChecksum
O campo SetChecksum deve conter a soma de verificação de todas as entradas de diretório no conjunto de entradas de diretório especificado. No entanto, a soma de verificação exclui esse campo (consulte Figura 2). As implementações devem verificar se o conteúdo desse campo é válido antes de usar qualquer outra entrada de diretório no conjunto de entradas de diretório especificado.
Estruturas críticas de entrada de diretório primário que derivam desse modelo podem redefinir os campos SecondaryCount e SetChecksum.
Figura 2 de Computação EntrySetChecksum
UInt16 EntrySetChecksum
(
UCHAR * Entries, // points to an in-memory copy of the directory entry set
UCHAR SecondaryCount
)
{
UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
UInt16 Checksum = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 2) || (Index == 3))
{
continue;
}
Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];
}
return Checksum;
}
6.3.4 Campo GeneralPrimaryFlags
O campo GeneralPrimaryFlags contém sinalizadores (consulte Tabela 17).
Estruturas críticas de entrada de diretório primário que derivam desse modelo podem redefinir esse campo.
estrutura de campo GeneralPrimaryFlags da tabela 17
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
AlocaçãoPossível | 0 | 1 | Esse campo é obrigatório e seção 6.3.4.1 define seu conteúdo. |
NoFatChain | 1 | 1 | Esse campo é obrigatório e seção 6.3.4.2 define seu conteúdo. |
Definido Personalizadamente | 2 | 14 | Esse campo é obrigatório e as estruturas derivadas desse modelo podem definir esse campo. |
6.3.4.1 Campo AllocationPossible
O campo AllocationPossible deve descrever se uma alocação no Heap de Cluster é possível ou não para a entrada de diretório fornecida.
Os valores válidos para este campo devem ser:
- 0, o que significa que uma alocação associada de clusters não é possível e os campos FirstCluster e DataLength são realmente indefinidos (estruturas que derivam desse modelo podem redefinir esses campos)
- 1, o que significa que uma alocação associada de clusters é possível e os campos FirstCluster e DataLength estão definidos
6.3.4.2 Campo NoFatChain
O campo NoFatChain deve indicar se o FAT ativo descreve ou não a cadeia de cluster da alocação determinada.
Os valores válidos para este campo devem ser:
- 0, o que significa que as entradas FAT correspondentes para a cadeia de cluster da alocação são válidas e as implementações devem interpretá-las; se o campo AllocationPossible contiver o valor 0 ou se o campo AllocationPossible contiver o valor 1 e o campo FirstCluster contiver o valor 0, o único valor válido desse campo será 0
- 1, o que significa que a alocação associada é uma série contígua de clusters; as entradas FAT correspondentes para os clusters são inválidas e as implementações não devem interpretá-las; as implementações podem usar a seguinte equação para calcular o tamanho da alocação associada: DataLength/(2SectorsPerClusterShift* 2BytesPerSectorShift) arredondado para o inteiro mais próximo
Se as estruturas de entrada de diretório primário crítico que derivam desse modelo redefinir o campo GeneralPrimaryFlags, as entradas FAT correspondentes para a cadeia de cluster de qualquer alocação associada serão válidas.
Campo FirstCluster 6.3.5
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.2).
Se o bit NoFatChain for 1, o FirstCluster deverá apontar para um cluster válido no heap de cluster.
Estruturas críticas de entrada de diretório primário que derivam desse modelo podem redefinir os campos FirstCluster e DataLength. Outras estruturas derivadas desse modelo poderão redefinir os campos FirstCluster e DataLength somente se o campo AllocationPossible contiver o valor 0.
6.3.6 Campo DataLength
O campo DataLength deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.3).
Se o bit NoFatChain for 1, o DataLength não deverá ser zero. Se o campo FirstCluster for zero, DataLength também deverá ser zero.
Estruturas críticas de entrada de diretório primário que derivam desse modelo podem redefinir os campos FirstCluster e DataLength. Outras estruturas derivadas desse modelo poderão redefinir os campos FirstCluster e DataLength somente se o campo AllocationPossible contiver o valor 0.
6.4 Modelo de DirectoryEntry Secundário Genérico
A finalidade central das entradas de diretório secundário é fornecer informações adicionais sobre um conjunto de entradas de diretório. A capacidade de interpretar o modelo de DirectoryEntry Secundário Genérico é obrigatória.
A definição de entradas de diretório secundário críticas e benignas correlaciona-se ao número de revisão do exFAT secundário. O suporte para qualquer entrada de diretório secundário crítico ou benigno que essa especificação, ou especificações subsequentes, define é opcional.
Todas as estruturas de entrada de diretório secundário derivam do modelo Generic Secondary DirectoryEntry (consulte Tabela 18), que deriva do modelo Generic DirectoryEntry (consulte Seção 6.2).
Modelo de Diretório Secundário Genérico Tabela 18
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e a Seção Seção 6.4.1 define seu conteúdo. |
SinalizadoresSecundáriosGerais | 1 | 1 | Esse campo é obrigatório e seção 6.4.2 define seu conteúdo. |
Definido Personalizadamente | 2 | 18 | Esse campo é obrigatório e as estruturas derivadas desse modelo definem seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 6.4.3 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 6.4.4 define seu conteúdo. |
Campo EntryType 6.4.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1)
Campo TypeCode 6.4.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.1).
Campo TypeImportance 6.4.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.2).
6.4.1.2.1 Entradas críticas do diretório secundário
Entradas de diretório secundário críticas contêm informações que são essenciais para o gerenciamento adequado do conjunto de entradas de diretório que contém. Embora o suporte para qualquer entrada de diretório secundário crítica específica seja opcional, uma entrada de diretório crítico não reconhecida renderiza toda a entrada de diretório definida como não reconhecida (além da definição dos modelos de entrada de diretório aplicáveis).
No entanto, se um conjunto de entradas de diretório contiver pelo menos uma entrada de diretório secundário crítica que uma implementação não reconhece, a implementação deverá, no máximo, interpretar os modelos das entradas de diretório no conjunto de entradas do diretório e não os dados que qualquer alocação associada a qualquer entrada de diretório no conjunto de entradas de diretório contém (entradas de diretório de arquivo são uma exceção, consulte Seção 7.4).
6.4.1.2.2 Entradas benignas de diretório secundário
Entradas benignas de diretório secundário contêm informações adicionais que podem ser úteis para gerenciar seu conjunto de entradas de diretório que contém. O suporte para qualquer entrada de diretório secundário benigno específico é opcional. As entradas de diretório secundário benigna não reconhecidas não renderizam toda a entrada de diretório definida como não reconhecida.
As implementações podem ignorar qualquer entrada secundária benigna que ela não reconhece.
Campo TypeCategory 6.4.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.3).
Para este modelo, o valor válido para este campo é 1.
Campo InUse 6.4.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.1.4).
6.4.2 Campo GeneralSecondaryFlags
O campo GeneralSecondaryFlags contém sinalizadores (consulte Tabela 19).
estrutura de campo GeneralSecondaryFlags da Tabela 19 Genérico
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
AllocationPossible | 0 | 1 | Esse campo é obrigatório e seção 6.4.2.1 define seu conteúdo. |
NoFatChain | 1 | 1 | Esse campo é obrigatório e seção 6.4.2.2 define seu conteúdo. |
Definido Personalizadamente | 2 | 6 | Esse campo é obrigatório e as estruturas derivadas desse modelo podem definir esse campo. |
6.4.2.1 Campo AllocationPossible
O campo AllocationPossible deve ter a mesma definição que o mesmo campo nomeado no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.4.1).
6.4.2.2 Campo NoFatChain
O campo NoFatChain deve ter a mesma definição que o mesmo campo nomeado no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.4.2).
6.4.3 Campo FirstCluster
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.2).
Se o bit NoFatChain for 1, o FirstCluster deverá apontar para um cluster válido no heap de cluster.
6.4.4 Campo DataLength
O campo DataLength deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte Seção 6.2.3).
Se o bit NoFatChain for 1, o DataLength não deverá ser zero. Se o campo FirstCluster for zero, DataLength também deverá ser zero.
7 Definições de entrada de diretório
A revisão 1.00 do sistema de arquivos exFAT define as seguintes entradas de diretório:
- Primário crítico
- Primário benigno
- GUID de Volume (Seção 7.5)
- Preenchimento TexFAT (Seção 7.10)
- Secundário crítico
- Secundário benigno
7.1 Entrada de diretório bitmap de alocação
No sistema de arquivos exFAT, um FAT não descreve o estado de alocação de clusters; em vez disso, um Bitmap de Alocação faz. Bitmaps de alocação existem no Heap de Cluster (consulte Seção 7.1.5) e têm entradas de diretório primário críticas correspondentes no diretório raiz (consulte Tabela 20).
O campo NumberOfFats determina o número de entradas de diretório bitmap de alocação válidas no diretório raiz. Se o campo NumberOfFats contiver o valor 1, o único número válido de entradas de diretório bitmap de alocação será 1. Além disso, a única entrada de diretório bitmap de alocação só será válida se descrever o Primeiro Bitmap de Alocação (consulte Seção 7.1.2.1). Se o campo NumberOfFats contiver o valor 2, o único número válido de entradas de diretório bitmap de alocação será 2. Além disso, as duas entradas de diretório bitmap de alocação só serão válidas se uma descrever o Bitmap de Primeira Alocação e a outra descrever o Bitmap de Segunda Alocação.
Estrutura de Diretório do Bitmap de Alocação da Tabela Tabela 20
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.1.1 define seu conteúdo. |
BitmapFlags | 1 | 1 | Esse campo é obrigatório e seção 7.1.2 define seu conteúdo. |
Reservado | 2 | 18 | Esse campo é obrigatório e seu conteúdo é reservado. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 7.1.3 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 7.1.4 define seu conteúdo. |
Campo EntryType 7.1.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1).
Campo TypeCode 7.1.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.1).
Para uma entrada de diretório bitmap de alocação, o valor válido para esse campo é 1.
Campo TypeImportance 7.1.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo de DirectoryEntry Primário Genérico (consulte Seção 6.3.1.2).
Para uma entrada de diretório bitmap de alocação, o valor válido para esse campo é 0.
Campo TypeCategory 7.1.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
Campo InUse 7.1.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.4).
7.1.2 Campo BitmapFlags
O campo BitmapFlags contém sinalizadores (consulte Tabela 21).
Estrutura de campo Tabela 21 BitmapFlags
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
BitmapIdentifier | 0 | 1 | Esse campo é obrigatório e seção 7.1.2.1 define seu conteúdo. |
Reservado | 1 | 7 | Esse campo é obrigatório e seu conteúdo é reservado. |
7.1.2.1 Campo BitmapIdentifier
O campo BitmapIdentifier deve indicar qual Bitmap de alocação a entrada de diretório fornecida descreve. As implementações devem usar o Primeiro Bitmap de Alocação em conjunto com o Primeiro FAT e devem usar o Bitmap de Segunda Alocação em conjunto com o Segundo FAT. O campo ActiveFat descreve qual FAT e Bitmap de Alocação estão ativos.
Os valores válidos para este campo devem ser:
- 0, o que significa que a entrada de diretório fornecida descreve o Primeiro Bitmap de Alocação
- 1, o que significa que a entrada de diretório fornecida descreve o Bitmap de Segunda Alocação e só é possível quando NumberOfFats contém o valor 2
7.1.3 Campo FirstCluster
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.5).
Esse campo contém o índice do primeiro cluster da cadeia de cluster, como descreve o FAT, que hospeda o Bitmap de Alocação.
7.1.4 Campo DataLength
O campo DataCluster deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.6).
7.1.5 Bitmap de alocação
Um Bitmap de Alocação registra o estado de alocação dos clusters no Heap de Cluster. Cada bit em um Bitmap de Alocação indica se o cluster correspondente está disponível para alocação ou não.
Um Bitmap de Alocação representa clusters do índice mais baixo para o mais alto (consulte Tabela 22). Por motivos históricos, o primeiro cluster tem índice 2.
Observação
O primeiro bit no bitmap é o bit de ordem mais baixa do primeiro byte.
estrutura bitmap de alocação da tabela 22
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Esse campo é obrigatório e a Seção Seção 7.1.5.1 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount – 1 | 1 | Esse campo é obrigatório e seção 7.1.5.1 define seu conteúdo. Observação: os setores Principal e inicialização de backup contêm o campo ClusterCount. |
Reservado | Contagem de Clusters | (DataLength * 8) – ClusterCount | Esse campo é obrigatório e seu conteúdo, se houver, é reservado. Observação: os setores Principal e inicialização de backup contêm o campo ClusterCount. |
7.1.5.1 BitmapEntry[2] ... Campos BitmapEntry[ClusterCount+1]
Cada campo BitmapEntry nessa matriz representa um cluster no Heap de Cluster. BitmapEntry[2] representa o primeiro cluster no Heap de Cluster e BitmapEntry[ClusterCount+1] representa o último cluster no Heap de Cluster.
Os valores válidos para esses campos devem ser:
- 0, que descreve o cluster correspondente como disponível para alocação
- 1, que descreve o cluster correspondente como não disponível para alocação (uma alocação de cluster já pode consumir o cluster correspondente ou o FAT ativo pode descrever o cluster correspondente como inválido)
7.2 Entrada de diretório de tabela de maiúsculas e minúsculas
A Tabela de Maiúsculas e Minúsculas define a conversão de maiúsculas e minúsculas para caracteres maiúsculas de minúsculas. Isso é importante devido à entrada do diretório Nome do Arquivo (consulte a Seção 7.7) usando caracteres Unicode e o sistema de arquivos exFAT não diferenciando maiúsculas de minúsculas e a preservação de maiúsculas e minúsculas. A tabela de maiúsculas e minúsculas existe no Heap de Cluster (consulte Seção 7.2.5) e tem uma entrada de diretório primário crítico correspondente no diretório raiz (consulte Tabela 23). O número válido de entradas de diretório de tabela de maiúsculas e minúsculas é 1.
Devido à relação entre os nomes de arquivo e tabela de maiúsculas e minúsculas, as implementações não devem modificar a tabela de caso acima, exceto como resultado de operações de formato.
Estrutura do Table DirectoryEntry da Tabela 23 de
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.2.1 define seu conteúdo. |
Reservado1 | 1 | 3 | Esse campo é obrigatório e seu conteúdo é reservado. |
TableChecksum | 4 | 4 | Esse campo é obrigatório e seção 7.2.2 define seu conteúdo. |
Reservado2 | oito | 12 | Esse campo é obrigatório e seu conteúdo é reservado. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 7.2.3 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 7.2.4 define seu conteúdo. |
Campo EntryType 7.2.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1).
Campo TypeCode 7.2.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.1).
Para a entrada do diretório tabela de maiúsculas e minúsculas, o valor válido para esse campo é 2.
Campo TypeImportance 7.2.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo de DirectoryEntry Primário Genérico (consulte Seção 6.3.1.2).
Para a entrada de diretório tabela de maiúsculas e minúsculas, o valor válido para esse campo é 0.
Campo TypeCategory 7.2.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
Campo InUse 7.2.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.4).
7.2.2 Campo TableChecksum
O campo TableChecksum contém a soma de verificação da tabela up-case (que os campos FirstCluster e DataLength descrevem). As implementações devem verificar se o conteúdo desse campo é válido antes de usar a Tabela de Casos Acima.
de Computação tableChecksum da Figura 3 do
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 Campo FirstCluster
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.5).
Esse campo contém o índice do primeiro cluster da cadeia de cluster, como descreve o FAT, que hospeda a Tabela de Maiúsculas e Minúsculas.
7.2.4 Campo DataLength
O campo DataCluster deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.6).
7.2.5 Tabela de maiúsculas e minúsculas
Uma tabela de maiúsculas e minúsculas é uma série de mapeamentos de caracteres Unicode. Um mapeamento de caractere consiste em um campo de 2 bytes, com o índice do campo na tabela de maiúsculas e minúsculas que representa o caractere Unicode a ser colocado em maiúsculas e minúsculas, e o campo de 2 bytes que representa o caractere Unicode com maiúsculas e minúsculas.
Os primeiros 128 caracteres Unicode têm mapeamentos obrigatórios (consulte Tabela 24). Uma tabela de maiúsculas e minúsculas que tem qualquer outro mapeamento de caracteres para qualquer um dos primeiros 128 caracteres Unicode é inválida.
Implementações que dão suporte apenas a caracteres do intervalo de mapeamento obrigatório podem ignorar os mapeamentos do restante da tabela de maiúsculas e minúsculas. Essas implementações só devem usar caracteres do intervalo de mapeamento obrigatório ao criar ou renomear arquivos (por meio da entrada do diretório Nome do Arquivo, consulte Seção 7.7). Ao criar nomes de arquivo existentes, essas implementações não devem criar caracteres de maiúsculas e minúsculas do intervalo de mapeamento não obrigatório, mas devem deixá-los intactos no nome de arquivo com maiúsculas e minúsculas resultante (este é um up-casing parcial). Ao comparar nomes de arquivo, essas implementações devem tratar nomes de arquivo que diferem do nome em comparação apenas por caracteres Unicode do intervalo de mapeamento não obrigatório como equivalente. Embora esses nomes de arquivo sejam apenas potencialmente equivalentes, essas implementações não podem garantir que o nome do arquivo totalmente atualizado não colida com o nome em comparação.
Tabela 24 Entradas obrigatórias da tabela de primeiras 128 maiúsculas de minúsculas
Índice de tabela | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
(Observação: as entradas com mapeamentos não de identidade em maiúsculas e minúsculas estão em negrito)
Ao formatar um volume, as implementações podem gerar uma tabela de maiúsculas e minúsculas em um formato compactado usando compactação de mapeamento de identidade, já que uma grande parte do espaço de caractere Unicode não tem nenhum conceito de caso (o que significa que os caracteres "minúsculas" e "maiúsculas" são equivalentes). As implementações compactam uma tabela de maiúsculas e minúsculas, representando uma série de mapeamentos de identidade com o valor FFFFh seguido com o número de mapeamentos de identidade.
Por exemplo, uma implementação pode representar os primeiros mapeamentos de caracteres de 100 (64h) com as oito entradas a seguir de uma tabela de maiúsculas e minúsculas compactada:
FFFFh, 0061h, 0041h, 0042h, 0043h
As duas primeiras entradas indicam que os primeiros 97 (61h) caracteres (de 0000h a 0060h) têm mapeamentos de identidade. Os caracteres subsequentes, de 0061h a 0063h, são mapeados para caracteres de 0041h a 0043h, respectivamente.
A capacidade de fornecer uma tabela de maiúsculas e minúsculas compactada após a formatação de um volume é opcional. No entanto, a capacidade de interpretar uma tabela descompactada e compactada é obrigatória. O valor do campo TableChecksum sempre está em conformidade com a forma como a tabela de maiúsculas e minúsculas existe no volume, que pode estar em formato compactado ou descompactado.
7.2.5.1 Tabela de caso de ocorrência recomendada
Ao formatar um volume, as implementações devem registrar a tabela up-case recomendada em formato compactado (consulte Tabela 25), para a qual o valor do campo TableChecksum é E619D30Dh.
Se uma implementação definir sua própria tabela de maiúsculas e minúsculas, compactada ou descompactada, essa tabela deverá abranger o intervalo de caracteres Unicode completo (de códigos de caractere 0000h a FFFFh inclusive).
tabela de maiúsculas e minúsculas recomendada da Tabela 25 em formato compactado
Deslocamento bruto | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
de 00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
de 02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 0300h | 0301h | 0302h | 0303h | 03:04h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500 h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 05:14 | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 05:23h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
de 05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
de 06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
de 07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001 h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 20:52 | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 21:25 horas | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 07:46 | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
Entrada de diretório de rótulo de volume 7.3
O Rótulo de Volume é uma cadeia de caracteres Unicode que permite que os usuários finais distinguem seus volumes de armazenamento. No sistema de arquivos exFAT, o Rótulo de Volume existe como uma entrada de diretório primário crítica no diretório raiz (consulte Tabela 26). O número válido de entradas de diretório do Rótulo de Volume varia de 0 a 1.
Estrutura directoryEntry do rótulo de volume da tabela tabela 26
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.3.1 define seu conteúdo. |
Contagem de Caracteres | 1 | 1 | Esse campo é obrigatório e seção 7.3.2 define seu conteúdo. |
VolumeLabel | 2 | 22 | Esse campo é obrigatório e seção 7.3.3 define seu conteúdo. |
Reservado | 24 | oito | Esse campo é obrigatório e seu conteúdo é reservado. |
Campo EntryType 7.3.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1).
Campo TypeCode 7.3.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.1).
Para a entrada do diretório rótulo de volume, o valor válido para este campo é 3.
Campo TypeImportance 7.3.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo de DirectoryEntry Primário Genérico (consulte Seção 6.3.1.2).
Para a entrada do diretório rótulo de volume, o valor válido para este campo é 0.
Campo TypeCategory 7.3.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
Campo InUse 7.3.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.4).
7.3.2 Campo CharacterCount
O campo CharacterCount deve conter o comprimento da cadeia de caracteres Unicode que o campo VolumeLabel contém.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 0, o que significa que a cadeia de caracteres Unicode tem 0 caracteres de comprimento (o que equivale a nenhum rótulo de volume)
- No máximo 11, o que significa que a cadeia de caracteres Unicode tem 11 caracteres
7.3.3 Campo VolumeLabel
O campo VolumeLabel deve conter uma cadeia de caracteres Unicode, que é o nome amigável do volume. O campo VolumeLabel tem o mesmo conjunto de caracteres inválidos que o campo FileName da entrada do diretório Nome do Arquivo (consulte Seção 7.7.3).
Entrada do Diretório de Arquivos 7.4
Entradas de diretório de arquivos descrevem arquivos e diretórios. Elas são entradas de diretório primário críticas e qualquer diretório pode conter zero ou mais entradas de diretório de arquivo (consulte Tabela 27). Para que uma entrada de diretório de arquivo seja válida, exatamente uma entrada de diretório da Extensão de Fluxo e pelo menos uma entrada de diretório nome de arquivo deve seguir imediatamente a entrada do diretório arquivo (consulte Seção 7.6 e Seção 7.7, respectivamente).
de Diretório de Arquivos da Tabela 27
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.4.1 define seu conteúdo. |
SecondaryCount | 1 | 1 | Esse campo é obrigatório e seção 7.4.2 define seu conteúdo. |
SetChecksum | 2 | 2 | Esse campo é obrigatório e seção 7.4.3 define seu conteúdo. |
FileAttributes | 4 | 2 | Esse campo é obrigatório e seção 7.4.4 define seu conteúdo. |
Reservado1 | 6 | 2 | Esse campo é obrigatório e seu conteúdo é reservado. |
CriarCarimboDeTempo | oito | 4 | Esse campo é obrigatório e seção 7.4.5 define seu conteúdo. |
Carimbo de Tempo da Última Modificação | 12 | 4 | Esse campo é obrigatório e seção 7.4.6 define seu conteúdo. |
LastAccessedTimestamp | 16 | 4 | Esse campo é obrigatório e seção 7.4.7 define seu conteúdo. |
Create10msIncrement | 20 | 1 | Esse campo é obrigatório e seção 7.4.5 define seu conteúdo. |
LastModified10msIncrement | 21 | 1 | Esse campo é obrigatório e seção 7.4.6 define seu conteúdo. |
CreateUtcOffset | 22 | 1 | Esse campo é obrigatório e seção 7.4.5 define seu conteúdo. |
Última Modificação Deslocamento UTC | vinte e três | 1 | Esse campo é obrigatório e seção 7.4.6 define seu conteúdo. |
LastAccessedUtcOffset | 24 | 1 | Esse campo é obrigatório e seção 7.4.7 define seu conteúdo. |
Reservado2 | vinte e cinco | 7 | Esse campo é obrigatório e seu conteúdo é reservado. |
Campo EntryType 7.4.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1).
Campo TypeCode 7.4.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.1).
Para uma entrada de diretório de arquivo, o valor válido para este campo é 5.
Campo TypeImportance 7.4.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo de DirectoryEntry Primário Genérico (consulte Seção 6.3.1.2).
Para uma entrada de diretório de arquivo, o valor válido para este campo é 0.
Campo TypeCategory 7.4.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
Campo InUse 7.4.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.4).
7.4.2 Campo SecondaryCount
O campo SecondaryCount deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.2).
7.4.3 Campo SetChecksum
O campo SetChecksum deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.3).
7.4.4 Campo FileAttributes
O campo FileAttributes contém sinalizadores (consulte Tabela 28).
Estrutura de campo Tabela 28 FileAttributes
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
ReadOnly | 0 | 1 | Esse campo é obrigatório e está em conformidade com a definição de MS-DOS. |
Escondido | 1 | 1 | Esse campo é obrigatório e está em conformidade com a definição de MS-DOS. |
Sistema | 2 | 1 | Esse campo é obrigatório e está em conformidade com a definição de MS-DOS. |
Reservado1 | 3 | 1 | Esse campo é obrigatório e seu conteúdo é reservado. |
Diretório | 4 | 1 | Esse campo é obrigatório e está em conformidade com a definição de MS-DOS. |
Arquivo | 5 | 1 | Esse campo é obrigatório e está em conformidade com a definição de MS-DOS. |
Reservado2 | 6 | 10 | Esse campo é obrigatório e seu conteúdo é reservado. |
7.4.5 CreateTimestamp, Create10msIncrement e CreateUtcOffset Fields
Em combinação, os campos CreateTimestamp e CreateTime10msIncrement devem descrever a data local e a hora em que o arquivo/diretório fornecido foi criado. O campo CreateUtcOffset descreve o deslocamento de data e hora local de UTC. As implementações devem definir esses campos após a criação do conjunto de entradas de diretório especificado.
Esses campos devem estar em conformidade com as definições dos campos Timestamp, 10msIncrement e UtcOffset (consulte Seção 7.4.8, Seção 7.4.9e Seção 7.4.10, respectivamente).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement e LastModifiedUtcOffset Fields
Em combinação, os campos LastModifiedTimestamp e LastModifiedTime10msIncrement devem descrever a data e a hora locais em que o conteúdo de qualquer um dos clusters associados à entrada do diretório da Extensão de Fluxo foi modificado pela última vez. O campo LastModifiedUtcOffset descreve o deslocamento de data e hora local de UTC. As implementações devem atualizar estes campos:
- Depois de modificar o conteúdo de qualquer um dos clusters associados à entrada de diretório da Extensão de Fluxo (exceto pelo conteúdo que existe além do ponto que o campo ValidDataLength descreve)
- Ao alterar os valores dos campos ValidDataLength ou DataLength
Esses campos devem estar em conformidade com as definições dos campos Timestamp, 10msIncrement e UtcOffset (consulte Seção 7.4.8, Seção 7.4.9e Seção 7.4.10, respectivamente).
7.4.7 Campos LastAccessedTimestamp e LastAccessedUtcOffset
O campo LastAccessedTimestamp deve descrever a data e a hora locais em que o conteúdo de qualquer um dos clusters associados à entrada de diretório da Extensão de Fluxo foi acessada pela última vez. O campo LastAccessedUtcOffset descreve o deslocamento de data e hora local de UTC. As implementações devem atualizar estes campos:
- Depois de modificar o conteúdo de qualquer um dos clusters associados à entrada de diretório da Extensão de Fluxo determinada (exceto pelo conteúdo que existe além do ValidDataLength)
- Ao alterar os valores dos campos ValidDataLength ou DataLength
As implementações devem atualizar esses campos depois de ler o conteúdo de qualquer um dos clusters associados à entrada de diretório da Extensão de Fluxo fornecida.
Esses campos devem estar em conformidade com as definições dos campos Carimbo de Data/Hora e UtcOffset (consulte Seção 7.4.8 e Seção 7.4.10, respectivamente).
7.4.8 Campos de carimbo de data/hora
Os campos de carimbo de data/hora descrevem a data e a hora locais, até uma resolução de dois segundos (consulte Tabela 29).
Estrutura de campo de carimbo de data/hora da tabela 29
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
DoubleSeconds | 0 | 5 | Esse campo é obrigatório e seção 7.4.8.1 define seu conteúdo. |
Minuto | 5 | 6 | Esse campo é obrigatório e seção 7.4.8.2 define seu conteúdo. |
Hora | 11 | 5 | Esse campo é obrigatório e seção 7.4.8.3 define seu conteúdo. |
Dia | 16 | 5 | Esse campo é obrigatório e seção 7.4.8.4 define seu conteúdo. |
Mês | 21 | 4 | Esse campo é obrigatório e seção 7.4.8.5 define seu conteúdo. |
Ano | vinte e cinco | 7 | Esse campo é obrigatório e seção 7.4.8.6 define seu conteúdo. |
7.4.8.1 Campo DoubleSeconds
O campo DoubleSeconds deve descrever a parte de segundos do campo Carimbo de Data/Hora, em múltiplos de dois segundos.
O intervalo válido de valores para este campo deve ser:
- 0, que representa 0 segundos
- 29, que representa 58 segundos
7.4.8.2 Minutos de Campo
O campo Minuto deve descrever a parte de minutos do campo Carimbo de Data/Hora.
O intervalo válido de valores para este campo deve ser:
- 0, que representa 0 minutos
- 59, que representa 59 minutos
Campo 7.4.8.3 Hora
O campo Hora deve descrever a parte de horas do campo Carimbo de Data/Hora.
O intervalo válido de valores para este campo deve ser:
- 0, que representa 00:00 horas
- 23, que representa 23:00 horas
Campo 7.4.8.4 Day
O campo Dia deve descrever a parte do dia do campo Carimbo de Data/Hora.
O intervalo válido de valores para este campo deve ser:
- 1, que é o primeiro dia do mês determinado
- O último dia do mês determinado (o mês determinado define o número de dias válidos)
Campo 7.4.8.5 Mês
O campo Mês deve descrever a parte do mês do campo Carimbo de Data/Hora.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 1, que representa janeiro
- No máximo 12, o que representa dezembro
Campo 7.4.8.6 Ano
O campo Ano deve descrever a parte do ano do campo Carimbo de Data/Hora, em relação ao ano de 1980. Este campo representa o ano 1980 com o valor 0 e o ano 2107 com o valor 127.
Todos os valores possíveis para esse campo são válidos.
7.4.9 Campos de Incremento de 10ms
Os campos 10msIncrement fornecerão resolução de tempo adicional para seus campos timestamp correspondentes em múltiplos de dez milissegundos.
O intervalo válido de valores para esses campos deve ser:
- Pelo menos 0, que representa 0 milissegundos
- No máximo 199, que representa 1990 milissegundos
7.4.10 Campos UtcOffset
Os campos UtcOffset (consulte Tabela 30) devem descrever o deslocamento de UTC para a data local e a hora que seus campos Timestamp e 10msIncrement correspondentes descrevem. O deslocamento de UTC para a data e hora local inclui os efeitos dos fusos horários e outros ajustes de data e hora, como o horário de verão e as alterações regionais de horário de verão.
estrutura de campo utcOffset da tabela 30 utcOffset
nome do campo | de deslocamento (bit) |
de tamanho de (bits) |
comentários |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Esse campo é obrigatório e seção 7.4.10.1define seu conteúdo. |
OffsetValid | 7 | 1 | Esse campo é obrigatório e seção 7.4.10.2 define seu conteúdo. |
7.4.10.1 Campo OffsetFromUtc
O campo OffsetFromUtc deve descrever o deslocamento de UTC da data e hora locais que os campos Timestamp e 10msIncrement relacionados contêm. Este campo descreve o deslocamento de UTC em intervalos de 15 minutos (consulte a Tabela 31).
Tabela 31 Significado dos valores do campo OffsetFromUtc
Valor | equivalente decimal assinado | descrição |
---|---|---|
3Fh | 63 | A data e a hora locais são UTC + 15:45 |
3Eh | 62 | A data e hora local são UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | A data e hora local é UTC + 00:15 |
00h | 0 | A data e a hora locais são UTC |
7Fh | -1 | A data e a hora locais são UTC – 00:15 |
. . . |
. . . |
. . . |
41h | -63 | A data e a hora locais são UTC – 15:45 |
40h | -64 | A data e hora local são UTC – 16:00 |
Como a tabela acima indica, todos os valores possíveis para esse campo são válidos. No entanto, as implementações só devem registrar o valor 00h para este campo quando:
- A data e a hora locais são, na verdade, as mesmas que UTC, caso em que o valor do campo OffsetValid deve ser 1
- Data e hora local não são conhecidas, caso em que o valor do campo OffsetValid deve ser 1 e as implementações devem considerar UTC como data e hora locais
- UTC não é conhecido, nesse caso, o valor do campo OffsetValid deve ser 0
Se o deslocamento de data e hora local de UTC não for um múltiplo de intervalos de 15 minutos, as implementações registrarão 00h no campo OffsetFromUtc e considerarão UTC como data e hora locais.
Campo OffsetValid 7.4.10.2
O campo OffsetValid deve descrever se o conteúdo do campo OffsetFromUtc é válido ou não, da seguinte maneira:
0, o que significa que o conteúdo do campo OffsetFromUtc é inválido
e deve ser 00h
1, o que significa que o conteúdo do campo OffsetFromUtc é válido
As implementações só devem definir esse campo como o valor 0 quando UTC não estiver disponível para calcular o valor do campo OffsetFromUtc. Se esse campo contiver o valor 0, as implementações tratarão os campos Carimbo de Data/Hora e 10msIncrement como tendo o mesmo deslocamento UTC que a data e hora locais atuais.
Entrada do diretório GUID de volume 7.5
A entrada do diretório GUID de volume contém um GUID que permite que as implementações distinguem volumes de forma exclusiva e programática. O GUID de Volume existe como uma entrada benigna do diretório primário no diretório raiz (consulte Tabela 32). O número válido de entradas de diretório guid de volume varia de 0 a 1.
de Diretório guid de volume da Tabela 32
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.5.1 define seu conteúdo. |
SecondaryCount | 1 | 1 | Esse campo é obrigatório e seção 7.5.2 define seu conteúdo. |
SetChecksum | 2 | 2 | Esse campo é obrigatório e seção 7.5.3 define seu conteúdo. |
GeneralPrimaryFlags | 4 | 2 | Esse campo é obrigatório e seção 7.5.4 define seu conteúdo. |
VolumeGuid | 6 | 16 | Esse campo é obrigatório e seção 7.5.5 define seu conteúdo. |
Reservado | 22 | 10 | Esse campo é obrigatório e seu conteúdo é reservado. |
Campo EntryType 7.5.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1).
Campo TypeCode 7.5.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.1).
Para a entrada do diretório guid de volume, o valor válido para esse campo é 0.
Campo TypeImportance 7.5.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo de DirectoryEntry Primário Genérico (consulte Seção 6.3.1.2).
Para a entrada do diretório guid de volume, o valor válido para esse campo é 1.
Campo TypeCategory 7.5.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
Campo InUse 7.5.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.4).
7.5.2 Campo SecondaryCount
O campo SecondaryCount deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.2).
Para a entrada do diretório guid de volume, o valor válido para esse campo é 0.
7.5.3 Campo SetChecksum
O campo SetChecksum deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.3).
7.5.4 Campo GeneralPrimaryFlags
O campo GeneralPrimaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.4) e define o conteúdo do campo CustomDefined a ser reservado.
7.5.4.1 Campo AllocationPossible
O campo AllocationPossible deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.4.1).
Para a entrada do diretório guid de volume, o valor válido para esse campo é 0.
7.5.4.2 Campo NoFatChain
O campo NoFatChain deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.4.2).
7.5.5 Campo VolumeGuid
O campo VolumeGuid deve conter um GUID que identifique exclusivamente o volume fornecido.
Todos os valores possíveis para esse campo são válidos, exceto o GUID nulo, que é {00000000-0000-0000-0000-000000000000}.
7.6 Entrada do Diretório de Extensão de Fluxo
A entrada do diretório da Extensão de Fluxo é uma entrada de diretório secundário crítica nos conjuntos de entradas do diretório de arquivos (consulte Tabela 33). O número válido de entradas de diretório da Extensão de Fluxo em um conjunto de entradas de diretório de arquivo é 1. Além disso, essa entrada de diretório só será válida se seguir imediatamente a entrada do diretório de arquivo.
Tabela 33 Stream Extension DirectoryEntry
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.6.1 define seu conteúdo. |
SinalizadoresSecundáriosGerais | 1 | 1 | Esse campo é obrigatório e seção 7.6.2 define seu conteúdo. |
Reservado1 | 2 | 1 | Esse campo é obrigatório e seu conteúdo é reservado. |
NameLength | 3 | 1 | Esse campo é obrigatório e Seção 7.6.3 define seu conteúdo. |
NameHash | 4 | 2 | Esse campo é obrigatório e seção 7.6.4 define seu conteúdo. |
Reservado2 | 6 | 2 | Esse campo é obrigatório e seu conteúdo é reservado. |
ValidDataLength | oito | oito | Esse campo é obrigatório e seção 7.6.5 define seu conteúdo. |
Reservado3 | 16 | 4 | Esse campo é obrigatório e seu conteúdo é reservado. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 7.6.6 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 7.6.7 define seu conteúdo. |
Campo EntryType 7.6.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1).
Campo TypeCode 7.6.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.1).
Para a entrada do diretório da Extensão de Fluxo, o valor válido para esse campo é 0.
Campo TypeImportance 7.6.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.2).
Para a entrada do diretório da Extensão de Fluxo, o valor válido para esse campo é 0.
Campo TypeCategory 7.6.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.3).
Campo InUse 7.6.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.4).
7.6.2 Campo GeneralSecondaryFlags
O campo GeneralSecondaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2) e define o conteúdo do campo CustomDefined a ser reservado.
7.6.2.1 Campo AllocationPossible
O campo AllocationPossible deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.1).
Para a entrada do diretório da Extensão de Fluxo, o valor válido para esse campo é 1.
7.6.2.2 Campo NoFatChain
O campo NoFatChain deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.2).
7.6.3 Campo NameLength
O campo NameLength deve conter o comprimento da cadeia de caracteres Unicode que as entradas subsequentes do diretório Nome do Arquivo (consulte Seção 7.7) contêm coletivamente.
O intervalo válido de valores para este campo deve ser:
- Pelo menos 1, que é o nome de arquivo mais curto possível
- No máximo 255, que é o nome de arquivo mais longo possível
O valor do campo NameLength também afeta o número entradas de diretório de nome de arquivo (consulte Seção 7.7).
Campo NameHash 7.6.4
O campo NameHash deve conter um hash de 2 bytes (consulte Figura 4) do nome do arquivo com maiúsculas e minúsculas. Isso permite que as implementações executem uma comparação rápida ao pesquisar um arquivo por nome. É importante ressaltar que o NameHash fornece uma verificação segura de uma incompatibilidade. As implementações devem verificar todas as correspondências do NameHash com uma comparação do nome do arquivo com maiúsculas e minúsculas.
de Computação de NameHash da Figura 4
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 Campo ValidDataLength
O campo ValidDataLength deve descrever até que ponto os dados do usuário do fluxo de dados foram gravados. As implementações devem atualizar esse campo à medida que gravam dados mais adiante no fluxo de dados. Na mídia de armazenamento, os dados entre o comprimento de dados válido e o comprimento dos dados do fluxo de dados são indefinidos. As implementações devem retornar zeros para operações de leitura além do comprimento de dados válido.
Se a entrada de diretório de arquivo correspondente descrever um diretório, o único valor válido para esse campo será igual ao valor do campo DataLength. Caso contrário, o intervalo de valores válidos para este campo será:
- Pelo menos 0, o que significa que nenhum dado do usuário foi gravado no fluxo de dados
- No máximo, DataLength, o que significa que os dados do usuário foram gravados em todo o comprimento do fluxo de dados
Campo FirstCluster 7.6.6
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.3).
Esse campo deve conter o índice do primeiro cluster do fluxo de dados, que hospeda os dados do usuário.
7.6.7 Campo DataLength
O campo DataLength deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.4).
Se a entrada de diretório de arquivo correspondente descrever um diretório, o valor válido para esse campo será todo o tamanho da alocação associada, em bytes, que pode ser 0. Além disso, para diretórios, o valor máximo para esse campo é 256 MB.
7.7 Entrada de diretório de nome de arquivo
As entradas do diretório Nome do Arquivo são entradas críticas do diretório secundário nos conjuntos de entradas do diretório de arquivos (consulte Tabela 34). O número válido de entradas de diretório nome de arquivo em um conjunto de entradas de diretório de arquivo é NameLength/15, arredondado até o inteiro mais próximo. Além disso, as entradas do diretório Nome do Arquivo são válidas somente se seguirem imediatamente a entrada do diretório da Extensão de Fluxo como uma série consecutiva. As entradas do diretório Nome do Arquivo são combinadas para formar o nome do arquivo para o conjunto de entradas do diretório de arquivo.
Todos os filhos de uma determinada entrada de diretório devem ter conjuntos de entrada exclusivos de diretório de nome de arquivo. Ou seja, não pode haver nomes duplicados de arquivo ou diretório após a inicialização em qualquer diretório.
DirectoryEntry do Nome do Arquivo da Tabela 34
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.7.1 define seu conteúdo. |
SinalizadoresSecundáriosGerais | 1 | 1 | Esse campo é obrigatório e seção 7.7.2 define seu conteúdo. |
Filename | 2 | 30 | Esse campo é obrigatório e Seção 7.7.3 define seu conteúdo. |
Campo EntryType 7.7.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1).
Campo TypeCode 7.7.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.1).
Para a entrada do diretório Nome do Arquivo, o valor válido para esse campo é 1.
Campo TypeImportance 7.7.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.2).
Para a entrada do diretório Nome do Arquivo, o valor válido para esse campo é 0.
Campo TypeCategory 7.7.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.3).
Campo InUse 7.7.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.4).
7.7.2 Campo GeneralSecondaryFlags
O campo GeneralSecondaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2) e define o conteúdo do campo CustomDefined a ser reservado.
7.7.2.1 Campo AllocationPossible
O campo AllocationPossible deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.1).
Para a entrada do diretório Nome do Arquivo, o valor válido para esse campo é 0.
7.7.2.2 Campo NoFatChain
O campo NoFatChain deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.2).
7.7.3 Campo FileName
O campo FileName deve conter uma cadeia de caracteres Unicode, que é uma parte do nome do arquivo. Na ordem em que as entradas do diretório Nome do Arquivo existem em um conjunto de entradas de diretório de arquivo, os campos FileName concatenam para formar o nome do arquivo para o conjunto de entradas do diretório arquivo. Considerando o comprimento do campo FileName, 15 caracteres e o número máximo de entradas de diretório nome do arquivo, 17, o comprimento máximo do nome do arquivo concatenado final é 255.
O nome do arquivo concatenado tem o mesmo conjunto de caracteres ilegais que outros sistemas de arquivos baseados em FAT (consulte Tabela 35). As implementações devem definir os caracteres não utilizados dos campos FileName como o valor 0000h.
tabela 35 caracteres FileName inválidos
de código de caractere | descrição | de código de caractere | descrição | de código de caractere | descrição |
---|---|---|---|---|---|
0000h | Código de controle | 0001h | Código de controle | 0002h | Código de controle |
0003h | Código de controle | 0004h | Código de controle | 0005h | Código de controle |
0006h | Código de controle | 0007h | Código de controle | 0008h | Código de controle |
0009h | Código de controle | 000Ah | Código de controle | 000Bh | Código de controle |
000Ch | Código de controle | 000Dh | Código de controle | 000Eh | Código de controle |
000Fh | Código de controle | 0010h | Código de controle | 0011h | Código de controle |
0012h | Código de controle | 0013h | Código de controle | 0014h | Código de controle |
0015h | Código de controle | 0016h | Código de controle | 0017h | Código de controle |
0018h | Código de controle | 0019h | Código de controle | 001Ah | Código de controle |
001Bh | Código de controle | 001Ch | Código de controle | 001Dh | Código de controle |
001Eh | Código de controle | 001Fh | Código de controle | 0022h | Aspa |
002Ah | Asterisco | 002Fh | Barra | 003Ah | Cólon |
003Ch | Sinal menor que | 003Eh | Sinal maior que | 003Fh | Ponto de interrogação |
005Ch | Barra traseira | 007Ch | Barra vertical |
Os nomes de arquivo "." e ".." têm o significado especial de "este diretório" e "contendo diretório", respectivamente. As implementações não devem registrar nenhum desses nomes de arquivo reservados no campo FileName. No entanto, as implementações podem gerar esses dois nomes de arquivo em listagens de diretório para se referir ao diretório listado e ao diretório que contém.
As implementações podem querer restringir nomes de arquivo e diretório apenas ao conjunto de caracteres ASCII. Nesse caso, eles devem limitar o uso de caracteres ao intervalo de caracteres válidos nas primeiras 128 entradas Unicode. Eles ainda devem armazenar nomes de arquivo e diretório no Unicode no volume e traduzir de/para ASCII/Unicode ao interagir com o usuário.
7.8 Entrada do Diretório de Extensão do Fornecedor
A entrada do diretório Extensão do Fornecedor é uma entrada benigna do diretório secundário nos conjuntos de entradas do diretório de arquivos (consulte Tabela 36). Um conjunto de entradas de diretório de arquivo pode conter qualquer número de entradas de diretório da Extensão do Fornecedor, até o limite de entradas de diretório secundário, menos o número de outras entradas de diretório secundário. Além disso, as entradas de diretório da Extensão do Fornecedor são válidas somente se não precederem as entradas necessárias do diretório Extensão de Fluxo e Nome do Arquivo.
As entradas de diretório de Extensão do Fornecedor permitem que os fornecedores tenham entradas de diretório exclusivas e específicas do fornecedor em conjuntos de entradas de diretório de arquivos individuais por meio do campo VendorGuid (consulte Tabela 36). Entradas de diretório exclusivas efetivamente permitem que os fornecedores estendam o sistema de arquivos exFAT. Os fornecedores podem definir o conteúdo do campo VendorDefined (consulte Tabela 36). As implementações do fornecedor podem manter o conteúdo do campo VendorDefined e podem fornecer funcionalidade específica do fornecedor.
As implementações que não reconhecem o GUID de uma entrada de diretório de Extensão de Fornecedor devem tratar a entrada do diretório da mesma forma que qualquer outra entrada de diretório secundário benigna não reconhecida (consulte Seção 8.2).
de Extensão de Fornecedor da Tabela 36
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.8.1 define seu conteúdo. |
SinalizadoresSecundáriosGerais | 1 | 1 | Esse campo é obrigatório e seção 7.8.2 define seu conteúdo. |
VendorGuid | 2 | 16 | Esse campo é obrigatório e Seção 7.8.3 define seu conteúdo. |
DefinidoPeloFornecedor | 18 | 14 | Esse campo é obrigatório e os fornecedores podem definir seu conteúdo. |
Campo EntryType 7.8.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1).
Campo TypeCode 7.8.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.1).
Para a entrada do diretório de Extensão do Fornecedor, o valor válido para esse campo é 0.
Campo TypeImportance 7.8.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.2).
Para a entrada do diretório Extensão do Fornecedor, o valor válido para esse campo é 1.
Campo TypeCategory 7.8.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.3).
Campo InUse 7.8.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.4).
7.8.2 Campo GeneralSecondaryFlags
O campo GeneralSecondaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2) e define o conteúdo do campo CustomDefined a ser reservado.
7.8.2.1 Campo AllocationPossible
O campo AllocationPossible deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.1).
Para a entrada do diretório de Extensão do Fornecedor, o valor válido para esse campo é 0.
7.8.2.2 Campo NoFatChain
O campo NoFatChain deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.2).
7.8.3 Campo VendorGuid
O campo VendorGuid deve conter um GUID que identifique exclusivamente a extensão de fornecedor fornecida.
Todos os valores possíveis para esse campo são válidos, exceto o GUID nulo, que é {00000000-0000-0000-0000-000000000000}. No entanto, os fornecedores devem usar uma ferramenta de geração de GUID, como GuidGen.exe, para selecionar um GUID ao definir suas extensões.
O valor desse campo determina a estrutura específica do fornecedor do campo VendorDefined.
7.9 Entrada do Diretório de Alocação do Fornecedor
A entrada do diretório Alocação do Fornecedor é uma entrada benigna do diretório secundário nos conjuntos de entradas do diretório de arquivo (consulte Tabela 37). Um conjunto de entradas de diretório de arquivo pode conter qualquer número de entradas de diretório de alocação de fornecedor, até o limite de entradas de diretório secundário, menos o número de outras entradas de diretório secundário. Além disso, as entradas de diretório de Alocação de Fornecedor são válidas somente se não precederem as entradas necessárias do diretório Extensão de Fluxo e Nome do Arquivo.
As entradas de diretório de Alocação do Fornecedor permitem que os fornecedores tenham entradas de diretório exclusivas e específicas do fornecedor em conjuntos de entradas de diretório de arquivo individuais por meio do campo VendorGuid (consulte Tabela 37). Entradas de diretório exclusivas efetivamente permitem que os fornecedores estendam o sistema de arquivos exFAT. Os fornecedores podem definir o conteúdo dos clusters associados, se houver algum. As implementações do fornecedor podem manter o conteúdo dos clusters associados, se houver, e podem fornecer funcionalidade específica do fornecedor.
As implementações que não reconhecem o GUID de uma entrada de diretório de Alocação de Fornecedor devem tratar a entrada do diretório da mesma forma que qualquer outra entrada de diretório secundário benigna não reconhecida (consulte Seção 8.2).
directoryEntry de alocação do fornecedor da Tabela 37
nome do campo | de deslocamento (byte) |
de tamanho de (byte) |
comentários |
---|---|---|---|
Tipo de entrada | 0 | 1 | Esse campo é obrigatório e seção 7.9.1 define seu conteúdo. |
SinalizadoresSecundáriosGerais | 1 | 1 | Esse campo é obrigatório e seção 7.9.2 define seu conteúdo. |
VendorGuid | 2 | 16 | Esse campo é obrigatório e seção 7.9.3 define seu conteúdo. |
DefinidoPeloFornecedor | 18 | 2 | Esse campo é obrigatório e os fornecedores podem definir seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e seção 7.9.4 define seu conteúdo. |
DataLength | 24 | oito | Esse campo é obrigatório e seção 7.9.5 define seu conteúdo. |
Campo EntryType 7.9.1
O campo EntryType deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1).
Campo TypeCode 7.9.1.1
O campo TypeCode deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.1).
Para a entrada do diretório alocação do fornecedor, o valor válido para esse campo é 1.
Campo TypeImportance 7.9.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.2).
Para a entrada do diretório alocação do fornecedor, o valor válido para esse campo é 1.
Campo TypeCategory 7.9.1.3
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.3).
Campo InUse 7.9.1.4
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.4).
7.9.2 Campo GeneralSecondaryFlags
O campo GeneralSecondaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2) e define o conteúdo do campo CustomDefined a ser reservado.
7.9.2.1 Campo AllocationPossible
O campo AllocationPossible deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.1).
Para a entrada do diretório alocação do fornecedor, o valor válido para esse campo é 1.
7.9.2.2 Campo NoFatChain
O campo NoFatChain deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.2.2).
7.9.3 Campo VendorGuid
O campo VendorGuid deve conter um GUID que identifique exclusivamente a alocação de fornecedor fornecida.
Todos os valores possíveis para esse campo são válidos, exceto o GUID nulo, que é {00000000-0000-0000-0000-000000000000}. No entanto, os fornecedores devem usar uma ferramenta de geração de GUID, como GuidGen.exe, para selecionar um GUID ao definir suas extensões.
O valor desse campo determina a estrutura específica do fornecedor do conteúdo dos clusters associados, se houver algum.
Campo FirstCluster 7.9.4
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.3).
7.9.5 Campo DataLength
O campo DataLength deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.4).
7.10 Entrada do Diretório de Preenchimento TexFAT
Essa especificação, exFAT Revision 1.00 File System Basic Specification, não define a entrada do diretório de preenchimento TexFAT. No entanto, seu código de tipo é 1 e sua importância de tipo é 1. Implementações dessa especificação devem tratar entradas de diretório de preenchimento TexFAT da mesma forma que qualquer outra entrada de diretório primário benigno não reconhecida, as implementações não devem mover entradas de diretório de preenchimento TexFAT.
8 Notas de implementação
8.1 Ordenação de gravação recomendada
As implementações devem garantir que o volume seja o mais resiliente possível para falhas de energia e outras falhas inevitáveis. Ao criar novas entradas de diretório ou modificar alocações de cluster, as implementações geralmente devem seguir esta ordem de gravação:
- Definir o valor do campo VolumeDirty como 1
- Atualizar o FAT ativo, se necessário
- Atualizar o Bitmap de Alocação ativo
- Criar ou atualizar a entrada do diretório, se necessário
- Desmarque o valor do campo VolumeDirty para 0, se seu valor antes da primeira etapa for 0
Ao excluir entradas de diretório ou liberar alocações de cluster, as implementações devem seguir esta ordem de gravação:
- Definir o valor do campo VolumeDirty como 1
- Excluir ou atualizar a entrada do diretório, se necessário
- Atualizar o FAT ativo, se necessário
- Atualizar o Bitmap de Alocação ativo
- Desmarque o valor do campo VolumeDirty para 0, se seu valor antes da primeira etapa for 0
8.2 Implicações de entradas de diretório não reconhecidas
As especificações futuras do exFAT do mesmo número de revisão principal, 1 e menor número de revisão maior que 0 podem definir novas entradas benignas de diretório secundário primário, crítico e secundário benigno. Somente as especificações exFAT de um número de revisão principal mais alto podem definir novas entradas críticas de diretório primário. As implementações dessa especificação, exFAT Revision 1.00 File System Basic Specification, devem ser capazes de montar e acessar qualquer volume exFAT do número de revisão principal 1 e qualquer número de revisão menor. Isso apresenta cenários em que uma implementação pode encontrar entradas de diretório que não reconhece. A seguir, descreva as implicações destes cenários:
A presença de entradas de diretório primário crítico não reconhecidas no diretório raiz torna o volume inválido. A presença de qualquer entrada de diretório primário crítica, exceto entradas de diretório de arquivo, em qualquer diretório não raiz, torna o diretório de hospedagem inválido.
As implementações não devem modificar entradas de diretório primário benignas não reconhecidas ou suas alocações de cluster associadas. No entanto, ao excluir um diretório e somente ao excluir um diretório, as implementações devem excluir entradas de diretório primário benignas não reconhecidas e liberar todas as alocações de cluster associadas, se houver.
As implementações não devem modificar entradas de diretório secundário críticas não reconhecidas ou suas alocações de cluster associadas. A presença de uma ou mais entradas de diretório secundário críticas não reconhecidas em um conjunto de entradas de diretório renderiza todo o conjunto de entradas de diretório não reconhecido. Ao excluir um conjunto de entradas de diretório que contém uma ou mais entradas de diretório secundário críticas não reconhecidas, as implementações devem liberar todas as alocações de cluster, se houver, associadas a entradas de diretório secundário críticas não reconhecidas. Além disso, se o conjunto de entradas de diretório descrever um diretório, as implementações poderão:
- Percorra o diretório
- Enumerar as entradas de diretório que ele contém
- Excluir entradas de diretório contidas
- Mover entradas de diretório contidas para um diretório diferente
No entanto, as implementações não devem:
- Modificar entradas de diretório contidas, exceto excluir, conforme observado
- Criar novas entradas de diretório independente
- Abrir entradas de diretório contidas, exceto percorrer e enumerar, conforme observado
As implementações não devem modificar entradas de diretório secundário benignas não reconhecidas ou suas alocações de cluster associadas. As implementações devem ignorar entradas de diretório secundário benignas não reconhecidas. Ao excluir um conjunto de entradas de diretório, as implementações devem liberar todas as alocações de cluster, se houver, associadas a entradas de diretório secundário benignas não reconhecidas.
9 Limites do sistema de arquivos
Limites de tamanho do setor 9.1
O campo BytesPerSectorShift define os limites de tamanho do setor inferior e superior (que é avaliado como limite inferior: 512 bytes; limite superior: 4.096 bytes).
Limites de tamanho do cluster 9.2
O campo SectorsPerClusterShift define os limites de tamanho do cluster inferior e superior (limite inferior: 1 setor; limite superior: 25 – setores bytesPerSectorShift, que é avaliado como 32 MB).
Limites de tamanho de heap de cluster 9.3
O Heap de Cluster deve conter pelo menos espaço suficiente para hospedar as seguintes estruturas básicas do sistema de arquivos: o diretório raiz, todos os Bitmaps de Alocação e a Tabela de Maiúsculas e Minúsculas.
O limite de tamanho de Heap de Cluster inferior é uma função do limite de tamanho inferior de cada uma das estruturas básicas do sistema de arquivos que residem no Heap de Cluster. Mesmo considerando o menor cluster possível (512 bytes), cada uma das estruturas básicas do sistema de arquivos não precisa de mais de um cluster. Portanto, o limite inferior é: 2 + clusters NumberOfFats, que é avaliado como 3 ou 4 clusters, dependendo do valor do campo NumberOfFats.
O limite de tamanho superior do Heap de Cluster é uma função simples do número máximo possível de clusters, que o campo ClusterCount define (limite superior: 232- 11 clusters). Independentemente do tamanho do cluster, esse heap de cluster tem espaço suficiente para pelo menos hospedar as estruturas básicas do sistema de arquivos.
Limites de tamanho de volume de 9,4
O campo VolumeLength define os limites de tamanho de volume inferior e superior (limite inferior: 220/2setoresBytesPerSectorShift, que é avaliado como 1 MB; limite superior: 264- 1 setores, que, considerando o maior tamanho de setor possível, é avaliado como aproximadamente 64ZB). No entanto, essa especificação recomenda no máximo 224- 2 clusters no Heap de Cluster (consulte Seção 3.1.9). Portanto, o limite superior recomendado de um volume é: ClusterHeapOffset + (224- 2) *2SectorsPerClusterShift. Considerando o maior tamanho de cluster possível, 32 MB e supondo que ClusterHeapOffset seja de 96 MB (espaço suficiente para as regiões de Inicialização principal e de backup e apenas o Primeiro FAT), o limite superior recomendado de um volume é avaliado como aproximadamente 512 TB.
Limites de tamanho do diretório 9.5
O campo DataLength da entrada do diretório da Extensão de Fluxo define os limites de tamanho do diretório inferior e superior (limite inferior: 0 bytes; limite superior: 256 MB). Isso significa que um diretório pode hospedar até 8.388.608 entradas de diretório (cada entrada de diretório consome 32 bytes). Considerando o menor conjunto de entradas de diretório de arquivos possível, três entradas de diretório, um diretório pode hospedar até 2.796.202 arquivos.
10 Apêndice
10.1 GuiDs (identificadores globalmente exclusivos)
Um GUID é a implementação da Microsoft de um identificador universalmente exclusivo. Um GUID é um valor de 128 bits que consiste em um grupo de 8 dígitos hexadecimal, seguido por três grupos de quatro dígitos hexadecimal cada e seguido por um grupo de 12 dígitos hexadecimal, por exemplo {6B29FC40-CA47-1067-B31D-00DD010662DA}, (consulte Tabela 38).
estrutura GUID da Tabela 38
nome do campo | de deslocamento (byte) |
de tamanho de (bytes) |
comentários |
---|---|---|---|
Data1 | 0 | 4 | Esse campo é obrigatório e contém os quatro bytes do primeiro grupo do GUID (6B29FC40h do exemplo). |
Data2 | 4 | 2 | Esse campo é obrigatório e contém os dois bytes do segundo grupo do GUID (CA47h do exemplo). |
Data3 | 6 | 2 | Esse campo é obrigatório e contém os dois bytes do terceiro grupo do GUID (1067h do exemplo). |
Data4[0] | oito | 1 | Esse campo é obrigatório e contém o byte mais significativo do quarto grupo do GUID (B3h do exemplo). |
Data4[1] | 9 | 1 | Esse campo é obrigatório e contém o byte menos significativo do quarto grupo do GUID (1Dh do exemplo). |
Data4[2] | 10 | 1 | Esse campo é obrigatório e contém o primeiro byte do quinto grupo do GUID (00h do exemplo). |
Data4[3] | 11 | 1 | Esse campo é obrigatório e contém o segundo byte do quinto grupo do GUID (DDh do exemplo). |
Data4[4] | 12 | 1 | Esse campo é obrigatório e contém o terceiro byte do quinto grupo do GUID (01h do exemplo). |
Data4[5] | 13 | 1 | Esse campo é obrigatório e contém o quarto byte do quinto grupo do GUID (06h do exemplo). |
Data4[6] | 14 | 1 | Esse campo é obrigatório e contém o quinto byte do quinto grupo do GUID (62h do exemplo). |
Data4[7] | 15 | 1 | Esse campo é obrigatório e contém o sexto byte do quinto grupo do GUID (DAh do exemplo). |
10.2 Tabelas de partição
Para garantir a interoperabilidade de volumes exFAT em um amplo conjunto de cenários de uso, as implementações devem usar o tipo de partição 07h para o GUID de partição e armazenamento particionado MBR {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} para armazenamento particionado gpt.
Histórico de alterações da documentação 11
A Tabela 39 descreve o histórico de versões de, correções para, adições, remoções e esclarecimentos deste documento.
Histórico de alterações da documentação Tabela 39
Data | descrição da alteração |
---|---|
08-Jan-2008 | Primeira versão da Especificação Básica, que inclui: Seção 1, Introdução Seção 2, Seção 3, Principais e Regiões de Inicialização de Backup Seção 4, Região da Tabela de Alocação de Arquivos Seção 5, Região de Dados Seção 6, Estrutura de Diretório Seção 7, Definições de Entrada de Diretório Seção 8, Notas de Implementação Seção 9, Limites do Sistema de Arquivos Seção 10, Apêndice |
08-Jun-2008 | Segunda versão da Especificação Básica, que inclui as seguintes alterações: Adição da Seção 11, Adição das entradas do diretório de extensão e alocação do fornecedor nas seções 7.8 e 7.9 Adição da tabela de maiúsculas e minúsculas recomendada nas seções 7.2.5 e 7.2.5.1 Adição dos campos UtcOffset na Seção 7.4 e adição do acrônimo UTC na Seção 1.3 Correção do tamanho do campo CustomDefined na Tabela 19 Correção do intervalo válido de valores NameLength na Seção 7.6.3 Correção e esclarecimento dos campos Carimbo de Data/Hora e 10msIncrement na Seção 7.4 Esclarecimento da estrutura Parâmetros Nulos na Seção 3.3 Esclarecimento do significado dos valores do campo NoFatChain na Seção 6.3.4.2 Esclarecimento do significado dos valores do campo DataLength na Seção 6.2.3 Esclarecimento do campo VolumeDirty na Seção 3.1.13.2 e ordenação de gravação recomendada na Seção 8.1 Esclarecimento do campo MediaFailure na Seção 3.1.13.3 |
01-Out-2008 | Terceira versão da Especificação Básica, que inclui as seguintes alterações: Adição de SHALL, SHOULD e MAY a explicações de campo Adição da definição UTC na Seção 1.3 da Tabela 2 Seções modificadas 1.5, para garantir o alinhamento com o documento de especificação do TexFAT. Esclareceu a restrição de que somente a Microsoft pode definir o layout de Entradas de Diretório na Seção 6.2 Adicionado esclarecimento de que o Campo FirstCluster será zero se o DataLength for zero e NoFatChain estiver definido como Seção 6.3.5 e Seção 6.4.3 Requisitos esclarecidos para entradas válidas de diretório de arquivos na Seção 7.4 Requisito adicionado para nomes exclusivos de arquivo e diretório à Seção 7.7 Adição da nota de implementação para ASCII ao final da Seção 7.7.3 |
01-Jan-2009 | Quarta versão da Especificação Básica, que inclui as seguintes alterações: Referências removidas para entradas do Controle de Acesso do Windows CE Adicionado esclarecimento à Seção 7.2.5.1 para exigir explicitamente uma tabela completa de maiúsculas e minúsculas |
02-Set-2009 | Quinta versão da Especificação Básica, que inclui as seguintes alterações: Alterações de formatação de documento para permitir uma conversão de PDF melhor |
24-Feb-2010 | Sexta versão da Especificação Básica, que inclui as seguintes alterações: Instrução incorreta alterada: "FirstCluster Field será zero se o DataLength for zero e NoFatChain estiver definido" na Seção 6.3.5 e seção 6.4.3 para "Se o bit NoFatChain for 1, o FirstCluster deverá apontar para um cluster válido no heap de cluster" para esclarecer que deve haver alocação válida se o bit NoFatChain estiver definido. Adicionado "Se o bit NoFatChain for 1, o DataLength não deverá ser zero. Se o campo FirstCluster for zero, o DataLength também deverá ser zero" para a Seção 6.3.6 e a Seção 6.4.4 para esclarecer que deve haver alocação válida se o bit NoFatChain estiver definido. Aviso de direitos autorais atualizado para 2010 |
26-Ago-2019 | Sétima versão da Especificação Básica, que inclui as seguintes alterações: Termos legais atualizados referentes à especificação, incluindo: Remoção do aviso confidencial da Microsoft Seção Remoção do Contrato de Licença de Documentação Técnica da Microsoft Corporation Aviso de direitos autorais atualizado para 2019 |