NTFS $Logfile

Тема в разделе "WASM.WIN32", создана пользователем jakimushka, 31 янв 2009.

  1. jakimushka

    jakimushka New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    43
    Есть задача записать кусок данных в $LogFile
    1. Oткрываю файл '\\.\n:'
    2. Ищу адрес MFT
    3. Считываю FileRecord для этого файла (3-ю)
    4. Считываю DataRuns
    5. Анализирую DataRuns. для каждого из них высчитываю смещение в байтах и записываю по этому смещению 1024 ноля функцией WriteFile. Функция срабатывает, возвращает ненулевой значение.
    6. Считываю с помощью DiskExplorer - ничего не изменилось

    Если те же операции производить с любым другим не системным файлом, в начале этого файла вижу 1024 ноля, т. е. оно таки работает. Подскажите, пожалуйста, почему это не работает $LogFile и как это сделать малой кровью (в user-mode)?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Проверь номера кластеров (секторов) которые ты получаешь с реальными.
    $LogFile это 2ой FileRecord (нумеруя с 0).
     
  3. jakimushka

    jakimushka New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    43
    Проверил. Полностью совпадают с полученными из DiskExplored . Я с 1 нумеровал, считываю из FileRecord имя файла - получаю $LogFile.
    Не может оно кешироватся где-нибудь? хотя опять таки пробовал сразу после записи отключать диск/перезагружать компьютер. Эффект тот же - отсутствие эффекта.
    Если бы с правами какая лажа была, функция WriteFile выдала бы ошибку. Так же ведь?
     
  4. jakimushka

    jakimushka New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    43
    lpNumberOfBytesWritten четко равно количеству записываемых байт. то есть оно таки туда записалось, получается ?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    таки да. попробуй сигнатуру записать какй-нибудь, а не 1024 нуля, и поискать по диску, может все таки не туда писанулось, а может $LogFile просто обновляется часто, и ты не успеваешь посмотреть результат.
     
  6. jakimushka

    jakimushka New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    43
    Ага, спасибо, чувак. Он таки обновляется часто и результата не видно. А пишется как надо.