Essas informações podem ser acessadas por meio do Defrag API. As ferramentas de desfragmentação de terceiros podem expô-lo. Em sistemas Windows recentes (8.1 trabalhos, 7 não testados) você pode usar fsutil
para consultá-lo:
C:\>fsutil file queryextents example.txt VCN: 0x0 Clusters: 0x2 LCN: 0x18f85e
Há também outro subcomando que despeja todas informações de todos os fluxos de dados no arquivo:
C:\>fsutil volume filelayout example.exe ********* File 0x01390000000008dd ********* File reference number : 0x01390000000008dd File attributes : 0x00000020: Archive ... Stream : ::$FILE_NAME Attributes : 0x00000000: *NONE* Flags : 0x0000000c: Resident | No clusters allocated Size : 80 Allocated Size : 80 Stream : ::$DATA (the main data stream) Attributes : 0x00000000: *NONE* Flags : 0x00000000: *NONE* Size : 1681920 Allocated Size : 1683456 Extents : 1 Extents : 1: VCN: 0 Clusters: 411 LCN: 8527618
Na saída de ambos os comandos, para cada "extensão" (um intervalo contíguo de clusters), você obtém o "número de cluster virtual" (deslocamento do início do arquivo), número de clusters na extensão e o "cluster lógico" number "(deslocamento do início do volume).
Nota: Arquivos minúsculos, que ajustado no registro base da MFT , são armazenados (" residente ") em seu registro MFT e terão extensões zero. Para aqueles, você Você precisará usar outras maneiras de explorar a própria MFT. (Além disso, em alguns casos, o arquivo pode ser escasso e ter apenas uma pequena parte alocada em disco; o restante é considerado apenas como bytes nulos.)
Os clusters são de nível de sistema de arquivos, então é necessário convertê-los em setores de nível de dispositivo de bloco; meu sistema tem 8 setores por cluster:
C:\>fsutil fsinfo ntfsinfo c: ... Bytes Per Sector : 512 Bytes Per Cluster : 4096 ... C:\>set/a 0x18f85e * (4096 / 512) 13091568 C:\>set/a 0x18f85e * 4096 6702882816
Isso significa que você pode abrir \.\C:
com HxD ou algo assim e encontrar o início do arquivo no setor 13091568 (ou byte 6702882816).