Вводная: Есть приложение (не мое), в которое, при старте приложения, инъектируется dll'ка (моя). Приложение большое, но нас интересует его маленькая часть. Приложение работает с 2-мя файлами... Один является индексным для другого. Приложение умеет работать с ними только в режиме чтения. Мне-же надо обновлять информацию в этих файлах в том случае, если приложение обратилось к конкретному куску данных (через индексный фаил). Надо каким-то образом перехватить факт обращения к памяти и по этому обращению выполнить свой код. Что известно: Можно перехватить и поменять маппинг файла, то есть заставить приложение работать с файлами и в режиме чтения. Более того, известен поинтер и размеры файлов. Собственно вопрос в том, как перехватить факт чтения данных из памяти? Пока что сам думаю: Накрывать этот кусок данных VirtualProtect'ом и использовать VEH для ловли ошибок, которые и будут сигналом к чтению, однако боюсь что это будет... не быстро... Так как с файлом работают довольно часто (несколько раз в секунду)
это не довольно часто = особо тупить не будет. по другому - захватывайте функи читающие данные. можно есчо установить хардверный бряк на доступ к указателю на память = атрибуты доступа к памяти менять постоянно не придётся, но тут есть свои камни (х_бряк то для треда только(
Функции, читающиие данные, надо искать в коде, а этого не хотелось-бы, так как пока решение не зависит от кода приложения (перекомпиляция, в разумных пределах, не требует переделки этой припарки). Линки на маны на хардварные бряки и вообще почитать, можно?
man что, папа? Линки, дайте линки на почитать. Вы, наверняка, знаете лучше литературу чем человек, который этим еще не занимался(я).
Откровенно говоря, я никогда не видел нормальных книжек по написанию файловых фильтров. Если кто видел, кидайте ссылки, я и сам с удовольствием почитал бы. Я изучал эти аспекты фильтров по форумам и исходникам ядра и WDK. Из литературы могу посоветовать разве что статьи на сайте OSR Online, в частности, эти: - What is the difference between cached I/O, user non-cached I/O, and paging I/O? - What are the rules for my file system/filter driver for handling paging I/O? What about paging file I/O? - How is cache coherency handled when a file is opened for "ordinary" (cached) I/O and also opened memory mapped?
книжка конечно старая 1997 года но в ней написано много чего по фаловой системе в целом, и фильтрам в частности Windows NT File System Internals, хотя думаю что она известна.
Вставлю свои три копейки http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/filterdriverdeveloperguide.doc
А ещё Вы можете обнулить регистр DS и обрабатывать Access Violations. Вот это будет реально тормозно.