NTFS. проблема с чтением из MFT-области
От: ws37sr2  
Дата: 04.02.09 07:46
Оценка:
Возникла такая проблема.
При чтении из MFT-области каждый 511 и 512 байты не верны.
     0: 4649 4c45 3000 0300 110d 7d3b 0000 0000    FILE0.....};....
        ...
   496: 1a21 0113 2231 1f2c c702 2101 07fe 0400    .!.."1.,..!.....
   512: 4f0f 310f 34c6 e831 20ef 2de5 4121 33da    O.1.4..1 .-.A!3.
        ...
  1008: 0000 0000 0000 0000 0000 0000 0000 0400    ................


А на самом деле должен был быть получен такой результат.
     0: 4649 4c45 3000 0300 110d 7d3b 0000 0000    FILE0.....};....
        ...
   496: 1a21 0113 2231 1f2c c702 2101 07fe 2111    .!.."1.,..!.....
   512: 4f0f 310f 34c6 e831 20ef 2de5 4121 33da    O.1.4..1 .-.A!3.
        ...
  1008: 0000 0000 0000 0000 0000 0000 0000 0000    ................


Если читаю из кластеров не относящихся к MFT-области то эти быйты не портятся.
     0: ee3f e70d 573b 8986 24e6 bdf0 c57b c858    .?..W;..$....{.X
        ...
   496: c918 a24c fa0b 20f5 b3a8 e9d1 b90b 7042    ...L.. .......pB
   512: 5086 4fc1 60e6 81c6 8d10 fa0b 2a16 9c32    P.O.`.......*..2
        ...
  1008: 7021 3702 22c0 f1d0 038b e105 67a7 0426    p!7.".......g..&


Читаю следующим образом.
       HANDLE hDrive = CreateFile(TEXT("\\\\.\\PHYSICALDRIVE0"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    LARGE_INTEGER n64Pos;
    n64Pos.QuadPart = NTFSPartition->startMftLCN + 10809155584;
    SetFilePointerEx(hDrive, n64Pos, NULL, FILE_BEGIN);

    DWORD dwBytesRead;
    BYTE *buf= new BYTE[1024];
    ReadFile(hDrive, buf, 1024, &dwBytesRead, NULL);


Сначала подумал, что это винда мне специально портит эти байты. Побробовал прочитать тот же сектор из под линукса — Эффект оказался тем же самым.
Может кто-нибудь уже сталкивался с этой проблемой. Помогите пожалуйста. Уже не знаю что делать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.