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