![]() |
eXeL@B —› Программирование —› NTFS MFT и системные файлы |
Посл.ответ | Сообщение |
|
Создано: 17 февраля 2007 23:06 · Личное сообщение · #1 Проблема в следуещем: хочу открыть, скопировать, хоть как-нибудь получить доступ к $MFT на конкретном томе, но CrFile, c:$MFT - ошибка, CopyFile, C:$MFT - ошибка. Единственное что могу - сбросить атрибуты файла на нормал, но с главной таблицей файлов тома необдуманных односторонних действий делать не хочется ![]() ![]() |
|
Создано: 17 февраля 2007 23:41 · Личное сообщение · #2 |
|
Создано: 18 февраля 2007 06:14 · Личное сообщение · #3 |
|
Создано: 18 февраля 2007 07:24 · Личное сообщение · #4 |
|
Создано: 18 февраля 2007 07:45 · Личное сообщение · #5 |
|
Создано: 18 февраля 2007 09:29 · Личное сообщение · #6 Делается так (под админом): char buf[512]; DWORD io; HANDLE h = CreateFile("\\.\Буква_тома:", GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0, OPEN_EXISTING,0,0); // открываем том в RAW SetFilePointer(h,0,0,FILE_BEGIN); ReadFile(h,buf,512,&io,0); // читаем суперблок по смещению 46 байт лежит линейный адрес МФТ в секторах. Размер записи в МФТ - обычно 1024 байта (2 сектора). Более детально о размере - "курить" НТФС суперблок. Если МФТ не фрагментированна, читать можно как "пока следующий блок в 1024 байта начинается с '$FILE' ". Если по-правильному - первые 24 блока МФТ _никогда_ не фрагментированны. Один из них (не помню номера) - описывает саму МФТ (как "нерезидентный атрибут"). Далее - читаем блок, "фиксим" (см. sectors bondaries fixing) и читаем run-list (можно помотреть исходники линуксового драйвера... но не советую.. нервы беречь надо ![]() ![]() |
|
Создано: 19 февраля 2007 00:20 · Личное сообщение · #7 |
|
Создано: 19 февраля 2007 04:00 · Личное сообщение · #8 Наверное это ?! winnt.h #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_ENCRYPTED 0x00000040 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 ![]() |
|
Создано: 20 февраля 2007 13:55 · Личное сообщение · #9 Freecod пишет: Проще содрать через winhex с физического диска файл и репить парся копию. Да ну... При небольшом размере тома может быть рамер кластера в 512 байт... А если диск сильно фрагментирован (что часто бывает рядом, например, с кэшем IE) - такой геммор с поиском кусков! Лучше уж доковырять структуру МФТ (благо в нете сырцы есть более-менее: видел, но не помню где ![]() Если надо "не на раз" - то лучше уж поковырять... А если "штучная работа" - согласен: любой hex с поддержкой "сырых дисков" и найти хоть и по кускам. Времени таки меньше уйдет... ![]() |
|
Создано: 16 марта 2007 21:37 · Личное сообщение · #10 |
![]() |
eXeL@B —› Программирование —› NTFS MFT и системные файлы |