Перехват чтения файлов

Тема в разделе "WASM.NT.KERNEL", создана пользователем WhiteDwarf, 6 июн 2007.

  1. WhiteDwarf

    WhiteDwarf New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    5
    Имеется драйвер-фильтр файловой системы который обрабатывает запросы IRP_MJ_READ и FastIoRead и заменяет содержимое файла. При IRP-запросе устанавливает новый Completion Routine, а при FastIo просто фильтрует данные после возврата оригинальной функции. Когда обращение к файлу идёт напрямую - через ReadFile (как в большинстве случаев и происходит), то всё работает нормально. Но когда мы открываем файл с помощью CreateFileMapping и MapViewOfFile (так делает notepad) то никаких изменений не наблюдается.

    Причем если первом чтении файла через mapping идут IRP-запросы, но которых IRP->UserBuffer не содержит данных файла, то при повторном чтении файла никаких IRP-запросов вообще нет.

    Если то, что написанно в "Windows Internals 2004" правда:
    [​IMG]

    То всё чтение через mapping идёт через Virtual Memory Manager, который в свою очередь делает запросы к драйверу через IoPageRead. В тоже время IoPageRead
    Ничего кроме создания запроса IRP_MJ_READ к драйверу не делает.

    Где может быть ошибка? И что-же ещё нужно перехватить чтобы при чтении файла через mapping, его содержимое изменялось?
     
  2. WhiteDwarf

    WhiteDwarf New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    5
    Что никто никогда не сталкивался с file-mapping-ом при написании драйверов-фильтров?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    при чтении файла, даже через маппинг, его содержимое ну никак не может изменится ;)
    может ты имел в виду при модификации маппинга в памяти, чтобы эти изменения обрабатывались драйвером, что надо сделать?
     
  4. WhiteDwarf

    WhiteDwarf New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    5
    Ну естественно изменение содержимого файла, полученного при чтении через какое-либо API, а не содержимого секторов на винчестере.