NTFS-писальщик

Тема в разделе "WASM.NT.KERNEL", создана пользователем Denwer, 26 апр 2007.

  1. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Вот собственно в чем вопрос, реально ли написать БЕЗГЛЮЧНЫЙ NTFS писальщик с прямым доступом к диску? Т.е. без использования всяких драйверов NTFS. Всего то записать один файл требуется. Сама струтура не сложная после вниматеоьного изучения, но вот присутствие паралельно ещо одного писальщика (я про windows) навод на мысль о будущей глючности данного решения. Хотя на крайни случай можно найти сектора на диске которые уже заняты другим файлом и на их место записать свой файл, разумеется меньего размера, что бы не трогать системный файл занятого места на диске и не трогать MFT.

    ПыСы: Ну думаю этот вопрос очень близок одному местному обитателю :)
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Угу, реально, только пока еще не видел такого ;)
    Ибо полностью все нюансы учесть довольно сложно.
     
  3. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Тогда как насчет перезаписи существующего файла?
     
  4. Denwer

    Denwer New Member

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Denwer
    Как дефрагментаторы работают точно не знаю, но всё-таки мне кажется что они юзают одно и то же API ;)
    Если файл уже открыт, то будет плохо ;)
    А если нет, то скорее всего можно произвести замену без последствий. То же самое с дирой, если она открыта в винде на запись, то возможны всякие эксцессы.
    А насчёт синхронизации, то думаю обновить несколько полей и хватит. Update sequance если не ошибаюсь.
     
  6. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Для дефрагментаторов существует специальные IOCTL. Для записи/чтения файлов таких ioctl-ей я не видел, но они д.б.
     
  7. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    IOCTL для записи и чтения файлов я вот не знаю, и мне кажется их нет, но даже если и будут то, какое устройство нада отрыть для отправки этого IOCTL? По идее драйвер NTFS, но вот он не имеет символической ссылки для его открытия.
     
  8. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Ну и где Касперски то? :)
     
  9. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Ага, нету ioctl- ей :dntknw: NtWriteFile использует IopSynchronousServiceTail -> IoCallDriver -> IofCallDriver <- а это указатель, инициализируемый при запуске.
     
  10. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    Denwer
    Для своего проекта посекторной записи на НТФС диски использовал для основы дифрагментатор Руссоновича. Помоищи его мож и тебе поможет.
     
  11. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Denwer
    *) структура NTFS действительно проста, особенно если писать резидентные файлы;
    *) на всякий случай можно пускать после записи чек-диск, если что он исправит;
    *) наличие еще одного писальщика обходится размонитированием и блокированием тома;
    *) системный диск хрен размонтируешь, тут нужно курить траву, уточни задачу, plz;
     
  12. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Уточняю, нужно записать файл, драйвер в директорию виндовс, причем сделать это таким оборазом что бы запись прошла мимо драйвера NTFS, хотя если еще точнее, то мимо фильтра-драйвера, котрый ставят некоторые проги в стек NTFS. Вот и пришла в голову идея прямой записи на диск, можно даже записать поверх существующего файла, но потом его просто восстановить.
     
  13. genesis

    genesis New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    43
    а как насчет прохучить FtDisk/IRP_MJ_WRITE?
    А там уже синхронизируемся на мьютексе, заставляем всех ждать, сами делаем свое черное дело, и отпускаем... имхо просто, и не нужно никаких особых контролов...
     
  14. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Denwer
    записать напрямую файл можно, но NTFS-драйвер об этом сразу не узнает, а как заставить его принудительно перечитать $MFT и индексы с диска - хз, ну разве что перезагружаться.
     
  15. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    А вот мне нада СРАЗУ как раз загрузить драйверок.
     
  16. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    стоп стоп, а как раз ничего не нада перезачитывать если я просто найду нужные сектора на диске и запишу туда свои данные, ну т.е. подменю данные существующего файла.
     
  17. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Это делается ИЗ ДРАЙВЕРА, а если я уже загрузил драйвер то ничего уже не нужно мудрить. Вся катавасия как раз с загрузкой драйвера.
     
  18. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    AFAIR в одной из статей MsRem'а это описывалось. Там говорилось о raw-чтении, но при наличии прав, тем же методом IMHO можно и писать. Defragment API в msdn туда же для полноты ощущений.
     
  19. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Чтение это детский лепет по сравнению с записью :)
     
  20. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Ну короче сделал я эту байду, усем спасибо за комментарии.