Имеется драйвер-фильтр файловой системы который обрабатывает запросы IRP_MJ_READ и FastIoRead и заменяет содержимое файла. При IRP-запросе устанавливает новый Completion Routine, а при FastIo просто фильтрует данные после возврата оригинальной функции. Когда обращение к файлу идёт напрямую - через ReadFile (как в большинстве случаев и происходит), то всё работает нормально. Но когда мы открываем файл с помощью CreateFileMapping и MapViewOfFile (так делает notepad) то никаких изменений не наблюдается. Причем если первом чтении файла через mapping идут IRP-запросы, но которых IRP->UserBuffer не содержит данных файла, то при повторном чтении файла никаких IRP-запросов вообще нет. Если то, что написанно в "Windows Internals 2004" правда: То всё чтение через mapping идёт через Virtual Memory Manager, который в свою очередь делает запросы к драйверу через IoPageRead. В тоже время IoPageRead Ничего кроме создания запроса IRP_MJ_READ к драйверу не делает. Где может быть ошибка? И что-же ещё нужно перехватить чтобы при чтении файла через mapping, его содержимое изменялось?
при чтении файла, даже через маппинг, его содержимое ну никак не может изменится может ты имел в виду при модификации маппинга в памяти, чтобы эти изменения обрабатывались драйвером, что надо сделать?
Ну естественно изменение содержимого файла, полученного при чтении через какое-либо API, а не содержимого секторов на винчестере.