Especificação do sistema de arquivos exFAT
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 centrais (veja a lista abaixo).
Mantenha 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.
Habilite 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.
Tabela 1 Definição de termos que têm um significado muito específico
Termo | Definição |
---|---|
Deve | Essa especificação usa o termo "deve" para descrever um comportamento obrigatório. |
Recomendável | Essa especificação usa o termo "deveria" para descrever um comportamento que ele recomenda fortemente, mas não torna obrigatório. |
Mai | 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 deverá modificar e interpretar o campo ou a estrutura como 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 do campo ou da 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 a Tabela 2).
Tabela 2 Texto completo de acrônimos comuns
Acrônimo | Texto Completo |
---|---|
ASCII | Código padrão americano para intercâmbio de informações |
BIOS | Sistema de saída de entrada básico |
CPU | Unidade de Processamento Central |
exFAT | Tabela de alocação de arquivo extensível |
FAT | 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 a Seção 10.1) |
INT | Interrupção |
ativa a | MBR (Registro Mestre de Inicialização) |
Texfat | ExFAT com segurança de transação |
UTC | Tempo Universal Coordenado UTC |
1.4 Qualificadores padrão de campo e estrutura
Campos e estruturas nessa especificação têm os seguintes qualificadores (veja a lista abaixo), a menos que a especificação observe o contrário.
Não assinados
Use a notação decimal para descrever valores, em que não foi anotado de outra forma; esta especificação usa a letra pós-correção "h" para indicar números hexadecimais 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
TexFAT é uma extensão para exFAT que adiciona semântica operacional segura para transações sobre o sistema de arquivos base. TexFAT é usado por 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 o espaço de dados necessário 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 | Deslocamento (setor) |
Tamanho (setores) |
Comentários |
---|---|---|---|
Região de Inicialização Principal | |||
Setor de Inicialização Principal | 0 | 1 | Essa sub-região é obrigatória e a Seção 3.1 define seu conteúdo. |
Principais setores de inicialização estendida | 1 | 8 | Essa sub-região é obrigatória e a Seção 3.2) define seu conteúdo. |
Principais parâmetros OEM | 9 | 1 | Essa sub-região é obrigatória e a 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 a 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 a Seção 3.1 define seu conteúdo. |
Setores de inicialização estendida de backup | 13 | 8 | Essa sub-região é obrigatória e a Seção 3.2 define seu conteúdo. |
Parâmetros OEM de backup | 21 | 1 | Essa sub-região é obrigatória e a 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 | 23 | 1 | Essa sub-região é obrigatória e a Seção 3.4 define seu conteúdo. |
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 Principal e inicialização de backup contêm o campo FatOffset. |
Primeiro FAT | FatOffset | FatLength | Essa sub-região é obrigatória e a Seção 4.1 define seu conteúdo. Observação: os setores Principal e inicialização de backup contêm os campos FatOffset e FatLength. |
Segunda FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Essa sub-região é obrigatória e a Seção 4.1 define seu conteúdo, se houver. Observação: os setores Principal e inicialização de backup contêm os campos FatOffset, FatLength e NumberOfFats. O campo NumberOfFats só pode conter os valores 1 e 2. |
Região de Dados | |||
Alinhamento do heap de 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 Principal e inicialização 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 * 2SetoresPerClusterShift | Essa sub-região é obrigatória e a Seção 5.1 define seu conteúdo. Observação: os setores Principal e inicialização de backup contêm os campos ClusterHeapOffset, ClusterCount e SectorsPerClusterShift. |
Excesso de espaço | ClusterHeapOffset + ClusterCount * 2SetoresPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SetoresPerClusterShift) | Essa sub-região é obrigatória e seu conteúdo, se houver, é indefinido. Observação: os setores Principal e inicialização 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 necessárias de inicialização, informações de identificação e parâmetros do sistema de arquivos para permitir que uma implementação execute o seguinte:
Alça 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 inicialização de backup é um backup da região inicialização principal. Ele auxilia na 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 quaisquer 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 principal ou de inicialização 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 inicial inicialize o conteúdo dos setores de 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 sua 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 | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
JumpBoot | 0 | 3 | Esse campo é obrigatório e a Seção 3.1.1 define seu conteúdo. |
FileSystemName | 3 | 8 | Esse campo é obrigatório e a Seção 3.1.2 define seu conteúdo. |
MustBeZero | 11 | 53 | Esse campo é obrigatório e a Seção 3.1.3 define seu conteúdo. |
PartitionOffset | 64 | 8 | Esse campo é obrigatório e a Seção 3.1.4 define seu conteúdo. |
VolumeLength | 72 | 8 | Esse campo é obrigatório e a Seção 3.1.5 define seu conteúdo. |
FatOffset | 80 | 4 | Esse campo é obrigatório e a Seção 3.1.6 define seu conteúdo. |
FatLength | 84 | 4 | Esse campo é obrigatório e a Seção 3.1.7 define seu conteúdo. |
ClusterHeapOffset | 88 | 4 | Esse campo é obrigatório e a Seção 3.1.8 define seu conteúdo. |
ClusterCount | 92 | 4 | Esse campo é obrigatório e a Seção 3.1.9 define seu conteúdo. |
FirstClusterOfRootDirectory | 96 | 4 | Esse campo é obrigatório e a Seção 3.1.10 define seu conteúdo. |
VolumeSerialNumber | 100 | 4 | Esse campo é obrigatório e a Seção 3.1.11 define seu conteúdo. |
FileSystemRevision | 104 | 2 | Esse campo é obrigatório e a Seção 3.1.12 define seu conteúdo. |
VolumeFlags | 106 | 2 | Esse campo é obrigatório e a Seção 3.1.13 define seu conteúdo. |
BytesPerSectorShift | 108 | 1 | Esse campo é obrigatório e a Seção 3.1.14 define seu conteúdo. |
SectorsPerClusterShift | 109 | 1 | Esse campo é obrigatório e a Seção 3.1.15 define seu conteúdo. |
NumberOfFats | 110 | 1 | Esse campo é obrigatório e a Seção 3.1.16 define seu conteúdo. |
DriveSelect | 111 | 1 | Esse campo é obrigatório e a Seção 3.1.17 define seu conteúdo. |
PercentInUse | 112 | 1 | Esse campo é obrigatório e a Seção 3.1.18 define seu conteúdo. |
Reservado | 113 | 7 | Esse campo é obrigatório e seu conteúdo é reservado. |
BootCode | 120 | 390 | Esse campo é obrigatório e a Seção 3.1.19 define seu conteúdo. |
BootSignature | 510 | 2 | Esse campo é obrigatório e a Seção 3.1.20 define seu conteúdo. |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | Esse campo é obrigatório e seu conteúdo, se houver, é indefinido. Observação: os setores Principal e Inicialização 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 é (na 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âmetro BIOS empacotado 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 2BytesPerSectorShift de20/2, 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 Espaço Em Excesso for 0, o maior valor desse campo será ClusterHeapOffset + (232- 11) * 2SetoresPerClusterShift.
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 First 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 são responsáveis pelos 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) *2 2/ 2BytesPerSectorShiftarredondado até 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 as FATs existam antes do Heap de Cluster
Esse campo pode conter um valor acima de seu limite inferior (conforme descrito acima) para permitir que a Segunda FAT, se presente, também seja alinhada às características da mídia de armazenamento subjacente. O conteúdo do espaço que excede o que o próprio FAT requer, 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 * 2SetoresPerClusterShift), 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 esse campo deve ser o menor dos seguintes:
(VolumeLength - ClusterHeapOffset) / 2SetoresPerClusterShiftarredondado 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 uma 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 não mais do que 2 clusters24-2 no Heap de Cluster. No entanto, as implementações poderão lidar com volumes com até 2 clustersde 32 a 11 no Heap de Cluster.
3.1.10 FirstClusterOfRootDirectory Field
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 Casos Acima 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
Campo VolumeSerialNumber 3.1.11
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 secundário. 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 baixa ordem e 1 para o byte de alta ordem
No máximo 99 para o byte de baixa ordem 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 secundária.
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 VolumeFlags da Tabela 5
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
ActiveFat | 0 | 1 | Esse campo é obrigatório e a Seção 3.1.13.1 define seu conteúdo. |
VolumeDirty | 1 | 1 | Esse campo é obrigatório e a Seção 3.1.13.2 define seu conteúdo. |
MediaFailure | 2 | 1 | Esse campo é obrigatório e a Seção 3.1.13.3 define seu conteúdo. |
ClearToZero | 3 | 1 | Esse campo é obrigatório e a 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 Bitmap segunda fat e 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 ativos de FAT e Alocação (consulte a Seção 7.1).
3.1.13.2 Campo VolumeDirty
O campo VolumeDirty deve descrever se o volume é 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 não resolve. Se, ao montar um volume, o valor desse campo for 1, somente as implementações que resolve inconsistências de metadados do sistema de arquivos poderão limpar o valor desse campo como 0. Essas implementações só devem limpar 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 na 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 nas tentativas de acesso a 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 em busca de falhas de mídia e registram todas as falhas como clusters "inválidos" no FAT (ou de outra forma resolve 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 nessa 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 BytesPerSectorShift Field
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 SetoresPerClusterShift Field
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 Bitmap fat e first allocation
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 DriveSelect Field
O campo DriveSelect deve conter o número estendido da unidade INT 13h, que auxilia na inicialização desse volume usando INT 13h estendido 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 PercentInUse Field
O campo PercentInUse deve descrever o percentual de clusters no Heap de Cluster alocado.
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 até 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 nesse 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 BootSignature Field
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 distintas de inicialização (consulte Tabela 6). Agentes de inicialização, como as instruções de inicialização no Setor de Inicialização Principal, implementações alternativas de 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 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 de Inicialização Estendida Principal e 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 da Tabela 6
Nome do Campo | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Esse campo é obrigatório e a Seção 3.2.1 define seu conteúdo. Observação: os setores Principal e inicialização de backup contêm o campo BytesPerSectorShift. |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | Esse campo é obrigatório e a Seção 3.2.2 define seu conteúdo. Observação: os setores Principal e inicialização 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 nesse 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 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 de parâmetros OEM principais e de backup
A sub-região 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 a Seção 3.3.2). Os fabricantes podem derivar suas próprias estruturas de parâmetros personalizados do modelo 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 principais parâmetros OEM e têm a mesma estrutura (consulte Tabela 7).
Antes de usar o conteúdo dos parâmetros Principal ou OEM 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 Main e Backup OEM conforme necessário (e também devem atualizar sua respectiva Soma de Verificação de Inicialização).
Estrutura de parâmetros OEM da Tabela 7
Nome do Campo | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
Parâmetros[0] | 0 | 48 | Esse campo é obrigatório e a Seção 3.3.1 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
Parâmetros[9] | 432 | 48 | Esse campo é obrigatório e a 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 Principal e inicialização 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 Parâmetros Genéricos (consulte a Seção 3.3.2). Qualquer campo Parâmetros não utilizados deve ser descrito como contendo uma estrutura parâmetros nulos (consulte a Seção 3.3.3).
Modelo de parâmetros genéricos 3.3.2
O modelo 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 | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
ParametersGuid | 0 | 16 | Esse campo é obrigatório e a Seção 3.3.2.1 define seu conteúdo. |
CustomDefined | 16 | 32 | Esse campo é obrigatório e as estruturas derivadas desse modelo definem seu conteúdo. |
3.3.2.1 ParametersGuid Field
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 Parâmetros Genéricos (consulte a Seção 3.3.2) e deve descrever um campo Parâmetros não utilizados (consulte Tabela 9). Ao criar ou atualizar a estrutura Parâmetros OEM, as implementações devem preencher campos parâmetros não utilizados com a estrutura Parâmetros Null. Além disso, ao criar ou atualizar a estrutura 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 Parâmetros OEM.
O suporte para a estrutura Parâmetros Nulos é obrigatório.
Estrutura de parâmetros nulos da Tabela 9
Nome do Campo | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
ParametersGuid | 0 | 16 | Esse campo é obrigatório e a Seção 3.3.3.1 define seu conteúdo. |
Reservado | 16 | 32 | Esse campo é obrigatório e seu conteúdo é reservado. |
3.3.3.1 ParametersGuid Field
O campo ParametersGuid deve estar em conformidade com a definição fornecida pelo modelo Parâmetros Genéricos (consulte a 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 parâmetro flash deriva do modelo 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 Parâmetros flash para otimizar as operações de acesso durante leituras/gravações e para alinhamento das estruturas do sistema de arquivos que duram a formatação da mídia.
O suporte para a estrutura parâmetros flash é opcional.
Estrutura de parâmetros flash da Tabela 10
Nome do Campo | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
ParametersGuid | 0 | 16 | Esse campo é obrigatório e a Seção 3.3.4.1 define seu conteúdo. |
EraseBlockSize | 16 | 4 | Esse campo é obrigatório e a Seção 3.3.4.2 define seu conteúdo. |
PageSize | 20 | 4 | Esse campo é obrigatório e a Seção 3.3.4.3 define seu conteúdo. |
SpareSectors | 24 | 4 | Esse campo é obrigatório e a Seção 3.3.4.4 define seu conteúdo. |
RandomAccessTime | 28 | 4 | Esse campo é obrigatório e a Seção 3.3.4.5 define seu conteúdo. |
ProgrammingTime | 32 | 4 | Esse campo é obrigatório e a Seção 3.3.4.6 define seu conteúdo. |
ReadCycle | 36 | 4 | Esse campo é obrigatório e a Seção 3.3.4.7 define seu conteúdo. |
WriteCycle | 40 | 4 | Esse campo é obrigatório e a 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 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).
3.3.4.1 ParametersGuid Field
O campo ParametersGuid deve estar em conformidade com a definição fornecida no modelo Parâmetros Genéricos (consulte a Seção 3.3.2.1).
O valor válido para esse campo, na notação GUID, é {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 EraseBlockSize Field
O campo EraseBlockSize deve descrever o tamanho, em bytes, do bloco de apagamento da mídia flash.
3.3.4.3 PageSize Field
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íveis para suas operações de moderação internas.
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.
Campo ProgrammingTime 3.3.4.6
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 da soma de verificação não deve incluir os campos VolumeFlags e PercentInUse em seu respectivo Setor de Inicialização (consulte a 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 de inicialização principal e 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 mudar.
Figura 1 Computação de Soma de Verificação de Inicialização
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 arquivo) 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 o FAT que não está ativo como obsoleto. O uso do FAT inativo e a alternância entre FATs são específicos da implementação.
4.1 Primeira e Segunda Sub-regiões FAT
Um FAT deve descrever as cadeias de cluster no Heap de Cluster (consulte a Tabela 11). Uma cadeia de clusters é uma série de clusters que fornece espaço para registrar 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 arquivo da tabela 11
Nome do Campo | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
FatEntry[0] | 0 | 4 | Esse campo é obrigatório e a Seção 4.1.1 define seu conteúdo. |
FatEntry[1] | 4 | 4 | Esse campo é obrigatório e a Seção 4.1.2 define seu conteúdo. |
FatEntry[2] | 8 | 4 | Esse campo é obrigatório e a Seção 4.1.3 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Esse campo é obrigatório e a 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. |
ExcessSpace | (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] existe apenas 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 com 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 nessa 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; o FatEntry determinado não deve apontar para qualquer FatEntry que o 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 clusters; esse é o único valor válido para o último FatEntry de qualquer cadeia de cluster fornecida
5 Região de Dados
A região Dados contém o Heap de Cluster, que fornece espaço gerenciado para estruturas, diretórios e arquivos do sistema de arquivos.
5.1 Sub-região do Heap de Cluster
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 a 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 predecessores 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 | Deslocamento (setor) |
Tamanho (setores) |
Comentários |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2setoresPerClusterShift | Esse campo é obrigatório e a 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) * 2SetoresPerClusterShift | 2setoresPerClusterShift | Esse campo é obrigatório e a 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] ... Cluster[ClusterCount+1] Campos
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 maneira vinculada.
Cada diretório consiste em uma série de entradas de diretório (consulte a 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 da Tabela 13
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Esse campo é obrigatório e a Seção 6.1 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N-1] | (N – 1) * 32 | 32 | Esse campo é obrigatório e a Seção 6.1 define seu conteúdo. N, o número de campos DirectoryEntry, é o tamanho, em bytes, da cadeia de clusters que contém o diretório especificado, dividido pelo tamanho de um campo DirectoryEntry, 32 bytes. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Cada campo DirectoryEntry nessa matriz deriva do modelo Generic DirectoryEntry (consulte a 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 a Tabela 14). Todas as estruturas de entrada de diretório derivam desse modelo e apenas 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 na Seção 7.8 e na Seção 7.9). A capacidade de interpretar o modelo Generic DirectoryEntry é obrigatória.
Tabela 14 Generic DirectoryEntry Template
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 6.2.1 define seu conteúdo. |
CustomDefined | 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 a Seção 6.2.2 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a Seção 6.2.3 define seu conteúdo. |
Campo EntryType 6.2.1
O campo EntryType tem três modos de uso definidos pelo valor do campo (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 realmente reservados
Todas as entradas de diretório subsequentes no diretório especificado também são marcadores de fim de diretório
Os marcadores de fim de diretório são válidos apenas fora dos conjuntos de entradas de diretório
As implementações podem substituir marcadores de fim de diretório conforme necessário
Entre 01h e 7Fh inclusive, que é um marcador de entrada de diretório não utilizado e as seguintes condições se aplicam:
Todos os outros campos no DirectoryEntry especificado são, na verdade, indefinidos
Entradas de diretório não utilizados são válidas apenas fora dos conjuntos de entradas 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 e as seguintes condições se aplicam:
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 a Seção 6.2.1.4) que contém o valor 1
Para evitar modificações no campo InUse (consulte a Seção 6.2.1.4) erroneamente, resultando 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 | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
TypeCode | 0 | 5 | Esse campo é obrigatório e a Seção 6.2.1.1 define seu conteúdo. |
TypeImportance | 5 | 1 | Esse campo é obrigatório e a Seção 6.2.1.2 define seu conteúdo. |
TypeCategory | 6 | 1 | Esse campo é obrigatório e a Seção 6.2.1.3 define seu conteúdo. |
InUse | 7 | 1 | Esse campo é obrigatório e a 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. Esse campo, mais os campos TypeImportance e TypeCategory (consulte Seção 6.2.1.2 e Seção 6.2.1.3, respectivamente) identificam 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.
6.2.1.2 TypeImportance Field
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 secundário primário e crítico, 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 secundário primário e benigno, respectivamente)
6.2.1.3 TypeCategory Field
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 a Seção 6.3)
1, o que significa que a entrada de diretório fornecida é secundária (consulte a Seção 6.4)
6.2.1.4 InUse Field
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 nenhuma alocação de cluster existe
Entre 2 e ClusterCount + 1, que é o intervalo de índices de cluster válidos
Estruturas derivadas desse modelo podem 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 * 2SetoresPerClusterShift* 2BytesPerSectorShift
Estruturas derivadas 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 Diretório 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 de diretório devem ser entradas de diretório secundário (consulte a Seção 6.4).
A capacidade de interpretar o modelo Generic Primary DirectoryEntry é 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 Diretório Primário Genérico da Tabela 16
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 6.3.1 define seu conteúdo. |
SecondaryCount | 1 | 1 | Esse campo é obrigatório e a Seção 6.3.2 define seu conteúdo. |
SetChecksum | 2 | 2 | Esse campo é obrigatório e a Seção 6.3.3 define seu conteúdo. |
GeneralPrimaryFlags | 4 | 2 | Esse campo é obrigatório e a Seção 6.3.4 define seu conteúdo. |
CustomDefined | 6 | 14 | Esse campo é obrigatório e as estruturas derivadas desse modelo definem seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e a Seção 6.3.5 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a 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).
6.3.1.2 TypeImportance Field
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 de 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 se correlaciona 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 críticas de entrada de diretório primário que essa especificação define.
6.3.1.2.2 Entradas benignas de diretório primário
As entradas de diretório primário benigno 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 se correlaciona ao número de revisão do exFAT secundário. O suporte para qualquer entrada de diretório primário benigno que essa especificação, ou qualquer especificação subsequente, define é opcional. Uma entrada de diretório primário benigno não reconhecida renderiza todo o conjunto de entradas de diretório como não reconhecido (além da definição dos modelos de entrada de diretório aplicáveis).
6.3.1.3 TypeCategory Field
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.
6.3.1.4 InUse Field
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 seguem imediatamente 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 de 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 derivadas 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 derivadas desse modelo podem redefinir os campos SecondaryCount e SetChecksum.
Figura 2 EntrySetChecksum Computation
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 derivadas desse modelo podem redefinir esse campo.
Estrutura de campo GeneralPrimaryFlags genérica da Tabela 17
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
AllocationPossible | 0 | 1 | Esse campo é obrigatório e a Seção 6.3.4.1 define seu conteúdo. |
NoFatChain | 1 | 1 | Esse campo é obrigatório e a Seção 6.3.4.2 define seu conteúdo. |
CustomDefined | 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 derivadas 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 sã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 fornecida.
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/ (2SetoresPerClusterShift* 2BytesPerSectorShift) arredondado para o inteiro mais próximo
Se as estruturas críticas de entrada de diretório primário derivadas desse modelo redefinirem 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 derivadas desse modelo podem redefinir os campos FirstCluster e DataLength. Outras estruturas derivadas desse modelo podem 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 a 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 derivadas desse modelo podem redefinir os campos FirstCluster e DataLength. Outras estruturas derivadas desse modelo podem redefinir os campos FirstCluster e DataLength somente se o campo AllocationPossible contiver o valor 0.
6.4 Generic Secondary DirectoryEntry Template
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 Generic Secondary DirectoryEntry é 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ítica ou benigna 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).
Tabela 18 Generic Secondary DirectoryEntry Template
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 6.4.1 define seu conteúdo. |
GeneralSecondaryFlags | 1 | 1 | Esse campo é obrigatório e a Seção 6.4.2 define seu conteúdo. |
CustomDefined | 2 | 18 | Esse campo é obrigatório e as estruturas derivadas desse modelo definem seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e a Seção 6.4.3 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a 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).
6.4.1.2 TypeImportance Field
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 de diretório secundário
As entradas críticas do diretório secundário contêm informações que são essenciais para o gerenciamento adequado de seu 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 todo o conjunto de entradas de diretório como não reconhecido (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 de 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 a Seção 7.4).
6.4.1.2.2 Entradas benignas do diretório secundário
Entradas benignas de diretório secundário contêm informações adicionais que podem ser úteis para gerenciar o conjunto de entradas de diretório que o contém. O suporte para qualquer entrada de diretório secundário benigno específica é opcional. As entradas de diretório secundário benigno não reconhecidas não renderizam todo o conjunto de entradas de diretório como não reconhecido.
As implementações podem ignorar qualquer entrada secundária benigna que ela não reconhece.
6.4.1.3 Campo TypeCategory
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte a Seção 6.2.1.3).
Para este modelo, o valor válido para esse campo é 1.
6.4.1.4 InUse Field
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte a Seção 6.2.1.4).
6.4.2 GeneralSecondaryFlags Field
O campo GeneralSecondaryFlags contém sinalizadores (consulte Tabela 19).
Tabela 19 GeneralSecondaryFlags Estrutura de Campo
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
AllocationPossible | 0 | 1 | Esse campo é obrigatório e a Seção 6.4.2.1 define seu conteúdo. |
NoFatChain | 1 | 1 | Esse campo é obrigatório e a Seção 6.4.2.2 define seu conteúdo. |
CustomDefined | 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 campo de mesmo nome no modelo Generic Primary DirectoryEntry (consulte a Seção 6.3.4.1).
6.4.2.2 Campo NoFatChain
O campo NoFatChain deve ter a mesma definição que o campo de mesmo nome no modelo Generic Primary DirectoryEntry (consulte a Seção 6.3.4.2).
Campo FirstCluster 6.4.3
O campo FirstCluster deve estar em conformidade com a definição fornecida no modelo Generic DirectoryEntry (consulte a 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 a 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 de 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 a 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 entrada de diretório bitmap de alocação só será válida se descrever o Primeiro Bitmap de Alocação (consulte a 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 Primeiro Bitmap de Alocação e a outra descrever o Segundo Bitmap de Alocação.
Tabela 20 Diretório de Bitmap de AlocaçãoEstrutura de Credenciais
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.1.1 define seu conteúdo. |
BitmapFlags | 1 | 1 | Esse campo é obrigatório e a 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 a Seção 7.1.3 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a 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 a 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 a Seção 6.3.1.1).
Para uma entrada de diretório bitmap de alocação, o valor válido para esse campo é 1.
7.1.1.2 TypeImportance Field
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (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.
7.1.1.3 TypeCategory Field
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
7.1.1.4 InUse Field
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.4).
Campo BitmapFlags 7.1.2
O campo BitmapFlags contém sinalizadores (consulte Tabela 21).
Estrutura de campo BitmapFlags da Tabela 21
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
BitmapIdentifier | 0 | 1 | Esse campo é obrigatório e a 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 especificada 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 é possível somente quando NumberOfFats contém o valor 2
Campo FirstCluster 7.1.3
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 o índice 2. Observação: o primeiro bit no bitmap é o bit de ordem mais baixa do primeiro byte.
Estrutura de bitmap de alocação da Tabela 22
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Esse campo é obrigatório e a Seção 7.1.5.1 define seu conteúdo. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | Esse campo é obrigatório e a 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 | ClusterCount | (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] ... BitmapEntry[ClusterCount+1] Campos
Cada campo BitmapEntry nesta 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 caso acima
A Tabela de Maiúsculas e Minúsculas define a conversão de caracteres de letras minúsculas para maiúsculas e minúsculas. Isso é importante devido à entrada do diretório Nome do Arquivo (consulte Seção 7.7) usando caracteres Unicode e o sistema de arquivos exFAT não diferencia maiúsculas de minúsculas e preservação de maiúsculas e minúsculas. A Tabela De Maiúsculas e Minúsculas existe no Heap de Cluster (consulte a Seção 7.2.5) e tem uma entrada de diretório primário crítica correspondente no diretório raiz (consulte Tabela 23). O número válido de entradas de diretório 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 maiúsculas e minúsculas, exceto como resultado de operações de formato.
Table 23 Up-case Table DirectoryEntry Structure
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.2.1 define seu conteúdo. |
Reserved1 | 1 | 3 | Esse campo é obrigatório e seu conteúdo é reservado. |
TableChecksum | 4 | 4 | Esse campo é obrigatório e a Seção 7.2.2 define seu conteúdo. |
Reserved2 | 8 | 12 | Esse campo é obrigatório e seu conteúdo é reservado. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e a Seção 7.2.3 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a 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.
7.2.1.2 TypeImportance Field
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.2).
Para a entrada do diretório Tabela de maiúsculas e minúsculas, o valor válido para esse campo é 0.
7.2.1.3 TypeCategory Field
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
7.2.1.4 InUse Field
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 Maiúsculas e Minúsculas.
Figura 3 TableChecksum Computation
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;
}
Campo FirstCluster 7.2.3
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 caracteres consiste em um campo de 2 bytes, com o índice do campo na tabela de maiúsculas e minúsculas representando o caractere Unicode a ser cased 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 caso de atualização. 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 maiúsculas e minúsculas de nomes de arquivo existentes, essas implementações não deverão configurar caracteres do intervalo de mapeamento não obrigatório, mas devem deixá-los intactos no nome de arquivo com maiúsculas e minúsculas resultante (isso é 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 de arquivo totalmente cased não colida com o nome em comparação.
Tabela 24 Entradas obrigatórias das primeiras 128 tabelas up-case
Í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 de caso up-case que não são de identidade 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 a compactação de mapeamento de identidade, pois uma grande parte do espaço de caracteres Unicode não tem nenhum conceito de maiúsculas e minúsculas (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, mapeiam para caracteres 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 up-case 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 cobrirá o intervalo de caracteres Unicode completo (de códigos de caractere 0000h a FFFFh inclusive).
Tabela 25 Tabela de maiúsculas e minúsculas recomendada 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 |
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 |
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 | 0304h | 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 | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 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 |
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 | 1DDH | 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 |
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 |
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 | 2001h | 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 | 2052h | 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 | 2125h | 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 | 0746h | 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 |
7.3 Entrada de diretório de rótulo de volume
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.
Diretório do rótulo de volume da tabela 26Estrutura de credenciais
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.3.1 define seu conteúdo. |
CharacterCount | 1 | 1 | Esse campo é obrigatório e a Seção 7.3.2 define seu conteúdo. |
VolumeLabel | 2 | 22 | Esse campo é obrigatório e a Seção 7.3.3 define seu conteúdo. |
Reservado | 24 | 8 | 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 esse campo é 3.
7.3.1.2 TypeImportance Field
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.2).
Para a entrada do diretório Rótulo de Volume, o valor válido para esse campo é 0.
7.3.1.3 TypeCategory Field
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte Seção 6.3.1.3).
7.3.1.4 InUse Field
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 é equivalente 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).
7.4 Entrada do Diretório de Arquivos
As entradas do diretório de arquivos descrevem arquivos e diretórios. Elas são entradas críticas de diretório primário 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 diretório Arquivo (consulte Seção 7.6 e Seção 7.7, respectivamente).
Diretório de arquivos da Tabela 27Entry
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.4.1 define seu conteúdo. |
SecondaryCount | 1 | 1 | Esse campo é obrigatório e a Seção 7.4.2 define seu conteúdo. |
SetChecksum | 2 | 2 | Esse campo é obrigatório e a Seção 7.4.3 define seu conteúdo. |
FileAttributes | 4 | 2 | Esse campo é obrigatório e a Seção 7.4.4 define seu conteúdo. |
Reserved1 | 6 | 2 | Esse campo é obrigatório e seu conteúdo é reservado. |
CreateTimestamp | 8 | 4 | Esse campo é obrigatório e a Seção 7.4.5 a> define seu conteúdo. |
LastModifiedTimestamp | 12 | 4 | Esse campo é obrigatório e a Seção 7.4.6 define seu conteúdo. |
LastAccessedTimestamp | 16 | 4 | Esse campo é obrigatório e a Seção 7.4.7 define seu conteúdo. |
Create10msIncrement | 20 | 1 | Esse campo é obrigatório e a Seção 7.4.5 a> define seu conteúdo. |
LastModified10msIncrement | 21 | 1 | Esse campo é obrigatório e a Seção 7.4.6 define seu conteúdo. |
CreateUtcOffset | 22 | 1 | Esse campo é obrigatório e a Seção 7.4.5 a> define seu conteúdo. |
LastModifiedUtcOffset | 23 | 1 | Esse campo é obrigatório e a Seção 7.4.6 define seu conteúdo. |
LastAccessedUtcOffset | 24 | 1 | Esse campo é obrigatório e a Seção 7.4.7 define seu conteúdo. |
Reserved2 | 25 | 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 a 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 a Seção 6.3.1.1).
Para uma entrada de diretório de arquivo, o valor válido para esse campo é 5.
Campo TypeImportance 7.4.1.2
O campo TypeImportance deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte a Seção 6.3.1.2).
Para uma entrada de diretório de arquivo, o valor válido para esse 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 a Seção 6.3.1.3).
7.4.1.4 InUse Field
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte a 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 a 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 a Seção 6.3.3).
7.4.4 Campo FileAttributes
O campo FileAttributes contém sinalizadores (consulte Tabela 28).
Estrutura do campo FileAttributes da Tabela 28
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
ReadOnly | 0 | 1 | Esse campo é obrigatório e está em conformidade com a definição do MS-DOS. |
Hidden | 1 | 1 | Esse campo é obrigatório e está em conformidade com a definição do MS-DOS. |
Sistema | 2 | 1 | Esse campo é obrigatório e está em conformidade com a definição do MS-DOS. |
Reserved1 | 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 do MS-DOS. |
Arquivos | 5 | 1 | Esse campo é obrigatório e está em conformidade com a definição do MS-DOS. |
Reserved2 | 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 e a hora locais 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 determinado.
Esses campos devem estar em conformidade com as definições dos campos Carimbo de data/hora, 10msIncrement e UtcOffset (consulte a Seção 7.4.8, Seção 7.4.9 e 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 de diretório da Extensão de Fluxo fornecida 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 fornecida (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 Carimbo de data/hora, 10msIncrement e UtcOffset (consulte a Seção 7.4.8, Seção 7.4.9 e Seção 7.4.10, respectivamente).
7.4.7 LastAccessedTimestamp e LastAccessedUtcOffset Fields
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 fornecida foi acessado 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 fornecida (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 Timestamp e UtcOffset (consulte a Seção 7.4.8 e a 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 a Tabela 29).
Estrutura de campo de carimbo de data/hora da Tabela 29
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
DoubleSeconds | 0 | 5 | Esse campo é obrigatório e a Seção 7.4.8.1 define seu conteúdo. |
Minuto | 5 | 6 | Esse campo é obrigatório e a Seção 7.4.8.2 define seu conteúdo. |
Hora | 11 | 5 | Esse campo é obrigatório e a Seção 7.4.8.3 define seu conteúdo. |
Dia | 16 | 5 | Esse campo é obrigatório e a Seção 7.4.8.4 define seu conteúdo. |
Mês | 21 | 4 | Esse campo é obrigatório e a Seção 7.4.8.5 define seu conteúdo. |
Year | 25 | 7 | Esse campo é obrigatório e a Seção 7.4.8.6 define seu conteúdo. |
Campo DoubleSeconds 7.4.8.1
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
Campo de 7.4.8.2 Minutos
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, que representa dezembro
Campo ano 7.4.8.6
O campo Ano descreverá a parte do ano do campo Carimbo de data/hora em relação ao ano de 1980. Esse 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 10msIncrement Fields
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 e hora local que os campos Timestamp e 10msIncrement correspondentes descrevem. O deslocamento de UTC para a data e hora local inclui os efeitos de fusos horários e outros ajustes de data e hora, como o horário de verão e as alterações regionais de verão.
Estrutura do campo Tabela 30 UtcOffset
Nome do Campo | Deslocamento (bit) |
Tamanho (bits) |
Comentários |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Esse campo é obrigatório e a Seção 7.4.10.1define seu conteúdo. |
OffsetValid | 7 | 1 | Esse campo é obrigatório e a 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 Tabela 31).
Tabela 31 Significado dos valores do campo OffsetFromUtc
Valor | Equivalente decimal assinado | Descrição |
---|---|---|
3Fh | 63 | A data e hora local é UTC + 15:45 |
3Eh | 62 | A data e a hora locais 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 hora local é UTC – 15:45 |
40h | -64 | A data e hora local é 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 esse 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 locais não são conhecidas; nesse caso, 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 deverão registrar 00h no campo OffsetFromUtc e considerarão UTC como data e hora locais.
7.4.10.2 Campo OffsetValid
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 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 a hora locais atuais.
7.5 Entrada de diretório guid de volume
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 de diretório primário benigno 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.
Diretório GUID de Volume da Tabela 32Entrada
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.5.1 define seu conteúdo. |
SecondaryCount | 1 | 1 | Esse campo é obrigatório e a Seção 7.5.2 define seu conteúdo. |
SetChecksum | 2 | 2 | Esse campo é obrigatório e a Seção 7.5.3 define seu conteúdo. |
GeneralPrimaryFlags | 4 | 2 | Esse campo é obrigatório e a Seção 7.5.4 define seu conteúdo. |
VolumeGuid | 6 | 16 | Esse campo é obrigatório e a 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 a 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 a Seção 6.3.1.1).
Para a entrada do diretório GUID do 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 Generic Primary DirectoryEntry (consulte a Seção 6.3.1.2).
Para a entrada do diretório GUID do volume, o valor válido para esse campo é 1.
7.5.1.3 Campo TypeCategory
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte a Seção 6.3.1.3).
7.5.1.4 InUse Field
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Primary DirectoryEntry (consulte a 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 a Seção 6.3.2).
Para a entrada do diretório GUID do 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 a 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 a 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 a Seção 6.3.4.1).
Para a entrada do diretório GUID do 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 a Seção 6.3.4.2).
Campo VolumeGuid 7.5.5
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 de diretório de extensão de fluxo
A entrada do diretório Extensão de Fluxo é uma entrada crítica de diretório secundário em Conjuntos de entradas de 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 diretório Arquivo.
Diretório da Extensão de Fluxo da Tabela 33Entrada
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.6.1 define seu conteúdo. |
GeneralSecondaryFlags | 1 | 1 | Esse campo é obrigatório e a Seção 7.6.2 define seu conteúdo. |
Reserved1 | 2 | 1 | Esse campo é obrigatório e seu conteúdo é reservado. |
NameLength | 3 | 1 | Esse campo é obrigatório e a Seção 7.6.3 define seu conteúdo. |
NameHash | 4 | 2 | Esse campo é obrigatório e a Seção 7.6.4 define seu conteúdo. |
Reserved2 | 6 | 2 | Esse campo é obrigatório e seu conteúdo é reservado. |
ValidDataLength | 8 | 8 | Esse campo é obrigatório e a 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 a Seção 7.6.6 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a 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 a 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 a Seção 6.4.1.1).
Para a entrada do diretório 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 a Seção 6.4.1.2).
Para a entrada do diretório Extensão de Fluxo, o valor válido para esse campo é 0.
7.6.1.3 Campo TypeCategory
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte a Seção 6.4.1.3).
7.6.1.4 InUse Field
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte a Seção 6.4.1.4).
7.6.2 GeneralSecondaryFlags Field
O campo GeneralSecondaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte a 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 a Seção 6.4.2.1).
Para a entrada do diretório 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 a Seção 6.4.2.2).
Campo NameLength 7.6.3
O campo NameLength deve conter o comprimento da cadeia de caracteres Unicode que as entradas de diretório de Nome de Arquivo subsequentes (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 a Seção 7.7).
Campo NameHash 7.6.4
O campo NameHash deve conter um hash de 2 bytes (consulte a 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 se todas as correspondências de NameHash com uma comparação do nome do arquivo com maiúsculas e minúsculas.
Figura 4 NameHash Computation
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 detalhadamente 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 do diretório File 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 a 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 a 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
Entradas de diretório de Nome de Arquivo são entradas críticas de diretório secundário em Conjuntos de entradas de diretório de arquivos (consulte Tabela 34). O número válido de entradas de diretório de Nome de Arquivo em um conjunto de entradas de diretório de arquivo é NameLength/15, arredondado para cima até o inteiro mais próximo. Além disso, as entradas de diretório de Nome de Arquivo serã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 arquivos.
Todos os filhos de uma determinada entrada de diretório devem ter conjuntos de entrada de diretório de nome de arquivo exclusivos. Ou seja, não pode haver nenhum arquivo duplicado ou nomes de diretório após o uso de maiúsculas e minúsculas em qualquer diretório.
Diretório do nome do arquivo da tabela 34Entry
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.7.1 define seu conteúdo. |
GeneralSecondaryFlags | 1 | 1 | Esse campo é obrigatório e a Seção 7.7.2 define seu conteúdo. |
FileName | 2 | 30 | Esse campo é obrigatório e a 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 a 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 a Seção 6.4.1.1).
Para a entrada do diretório Nome do Arquivo, o valor válido para esse campo é 1.
7.7.1.2 TypeImportance Field
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.
7.7.1.3 TypeCategory Field
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.3).
7.7.1.4 InUse Field
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 GeneralSecondaryFlags Field
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 da Extensão de Fluxo, 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 de arquivo final concatenado é 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.
Caracteres FileName inválidos da Tabela 35
Código de caractere | Descrição | Código de caractere | Descrição | 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 | Aspas |
002Ah | Asterisk | 002Fh | Barra '/' | 003Ah | Dois pontos |
003Ch | Sinal de menor que | 003Eh | Sinal de maior que | 003Fh | Ponto de interrogação |
005Ch | Barra invertida | 007Ch | Barra vertical |
Os nomes de arquivo "." e ".." têm o significado especial de "este diretório" e "diretório que contém", 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 que está sendo listado e ao diretório que o contém.
As implementações podem querer restringir os 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 em Unicode no volume e traduzir de/para ASCII/Unicode ao fazer a interfacagem com o usuário.
7.8 Entrada de diretório de extensão de fornecedor
A entrada do diretório Extensão do Fornecedor é uma entrada benigna de diretório secundário em Conjuntos de entradas de diretório de arquivos (consulte a Tabela 36). Um conjunto de entradas de diretório de arquivo pode conter qualquer número de entradas de diretório de Extensã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 da Extensão de Fornecedor são válidas somente se não precederem as entradas de diretório de Extensão de Fluxo e Nome de Arquivo necessárias.
As entradas de diretório da 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 a 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 a Tabela 36). As implementações do fornecedor podem manter o conteúdo do campo VendorDefined e podem fornecer funcionalidade específica do fornecedor.
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 benigno não reconhecida (consulte a Seção 8.2).
Diretório de extensão de fornecedor da Tabela 36Entry
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.8.1 define seu conteúdo. |
GeneralSecondaryFlags | 1 | 1 | Esse campo é obrigatório e a Seção 7.8.2 define seu conteúdo. |
VendorGuid | 2 | 16 | Esse campo é obrigatório e a Seção 7.8.3 define seu conteúdo. |
VendorDefined | 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 a 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 a Seção 6.4.1.1).
Para a entrada do diretório 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 a Seção 6.4.1.2).
Para a entrada do diretório Extensão do Fornecedor, o valor válido para esse campo é 1.
7.8.1.3 Campo TypeCategory
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte a Seção 6.4.1.3).
7.8.1.4 InUse Field
O campo InUse deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte a Seção 6.4.1.4).
7.8.2 GeneralSecondaryFlags Field
O campo GeneralSecondaryFlags deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte a 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 a Seção 6.4.2.1).
Para a entrada do diretório 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 a 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 em Conjuntos de entradas de diretório de arquivos (consulte a 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 de diretório de extensão de fluxo e nome de arquivo necessárias.
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 arquivos individuais por meio do campo VendorGuid (consulte a 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.
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 benigno não reconhecida (consulte a Seção 8.2).
Tabela 37 Diretório de Alocação do FornecedorEntry
Nome do Campo | Deslocamento (byte) |
Tamanho (byte) |
Comentários |
---|---|---|---|
Entrytype | 0 | 1 | Esse campo é obrigatório e a Seção 7.9.1 define seu conteúdo. |
GeneralSecondaryFlags | 1 | 1 | Esse campo é obrigatório e a Seção 7.9.2 define seu conteúdo. |
VendorGuid | 2 | 16 | Esse campo é obrigatório e a Seção 7.9.3 define seu conteúdo. |
VendorDefined | 18 | 2 | Esse campo é obrigatório e os fornecedores podem definir seu conteúdo. |
FirstCluster | 20 | 4 | Esse campo é obrigatório e a Seção 7.9.4 define seu conteúdo. |
Datalength | 24 | 8 | Esse campo é obrigatório e a 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.
7.9.1.2 TypeImportance Field
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.
7.9.1.3 TypeCategory Field
O campo TypeCategory deve estar em conformidade com a definição fornecida no modelo Generic Secondary DirectoryEntry (consulte Seção 6.4.1.3).
7.9.1.4 InUse Field
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 GeneralSecondaryFlags Field
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 geradora 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. As implementações dessa especificação devem tratar as 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 de diretório, se necessário
Limpe o valor do campo VolumeDirty para 0, se seu valor anterior à 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
Limpe o valor do campo VolumeDirty para 0, se seu valor anterior à primeira etapa for 0
8.2 Implicações de entradas de diretório não reconhecidas
Especificações futuras de exFAT do mesmo número de revisão principal, 1 e número de revisão menor que 0, podem definir novas entradas benignas primárias, críticas secundárias e benignas de diretório secundário. 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 desses cenários:
A presença de entradas de diretório primário críticas 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 críticas de diretório secundário 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 críticas de diretório secundário 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:
Atravessar para 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 independentes, 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
9.1 Limites de tamanho do setor
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).
9.2 Limites de tamanho de cluster
O campo SetoresPerClusterShift define os limites de tamanho de cluster inferior e superior (limite inferior: 1 setor; limite superior: 25 – setores BytesPerSectorShift, que é avaliado como 32 MB).
9.3 Limites de tamanho de heap de cluster
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 são avaliados 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: 2clusters de 32 a 11). 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.
9,4 Limites de tamanho de volume
O campo VolumeLength define os limites de tamanho de volume inferior e superior (limite inferior: 220/ 2setores BytesPerSectorShift, que é avaliado como 1MB; limite superior: 2setores de 64 a 1, que, considerando o maior tamanho de setor possível, são avaliados como aproximadamente 64ZB). No entanto, essa especificação não recomenda mais do que 2 clusters24-2 no Heap de Cluster (consulte a 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 inicialização principal e de backup e apenas o Primeiro FAT), o limite superior recomendado de um volume é avaliado como aproximadamente 512 TB.
9.5 Limites de tamanho de diretório
O campo DataLength da entrada de diretório da Extensão de Fluxo define os limites de tamanho de 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 oito dígitos hexadecimais, seguido por três grupos de quatro dígitos hexadecimais cada um e seguido por um grupo de 12 dígitos hexadecimal, por exemplo {6B29FC40-CA47-1067-B31D-00DD010662DA}, (consulte a Tabela 38).
Estrutura GUID da Tabela 38
Nome do Campo | Deslocamento (byte) |
Tamanho (bytes) |
Comentários |
---|---|---|---|
Data1 | 0 | 4 | Esse campo é obrigatório e contém os quatro bytes do primeiro grupo do GUID (6B29FC40h do exemplo). |
Dados2 | 4 | 2 | Esse campo é obrigatório e contém os dois bytes do segundo grupo do GUID (CA47h do exemplo). |
Dados3 | 6 | 2 | Esse campo é obrigatório e contém os dois bytes do terceiro grupo do GUID (1067h do exemplo). |
Data4[0] | 8 | 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). |
Dados4[2] | 10 | 1 | Esse campo é obrigatório e contém o primeiro byte do quinto grupo do GUID (00h do exemplo). |
Dados4[3] | 11 | 1 | Esse campo é obrigatório e contém o segundo byte do quinto grupo do GUID (DDh do exemplo). |
Dados4[4] | 12 | 1 | Esse campo é obrigatório e contém o terceiro byte do quinto grupo do GUID (01h do exemplo). |
Dados4[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). |
Dados4[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 por GPT.
11 Histórico de Alterações de Documentação
A Tabela 39 descreve o histórico de versões de, correções, adições, remoções e esclarecimentos deste documento.
Histórico de Alterações da Documentação da 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, Regiões principais e 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 Alocação de Fornecedor e Extensão do Fornecedor nas Seções 7.8 e 7.9 Adição da tabela up-case 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 De 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 Tabela 2 Seção 1.3 Seções modificadas 1.5, para garantir o alinhamento com o documento de especificação TexFAT. Esclareceu a restrição de que somente a Microsoft pode definir o layout das Entradas de Diretório na Seção 6.2 Foi adicionado esclarecimento de que FirstCluster Field será zero se 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 de Windows CE Controle de Acesso Adição de esclarecimento à Seção 7.2.5.1 para exigir explicitamente uma tabela completa de casos de atualização |
02-Set-2009 | Quinta versão da Especificação Básica, que inclui as seguintes alterações: Alterações de formatação de documentos para permitir uma melhor conversão de PDF |
24 de fevereiro de 2010 | Sexta versão da Especificação Básica, que inclui as seguintes alterações: Instrução incorreta alterada: "FirstCluster Field será zero se DataLength for zero e NoFatChain estiver definido" na Seção 6.3.5 e seção 6.4.3 como "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 de agosto de 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 |
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários