А>>>Без проверки итак фолт будет если память не для записи. Можно обратиться к памяти без её изменения, к примеру сделать or/xor с нулём. При этом Lock не нужен, так как память не изменяется.
O>>дык изменяется
O>>см http://rsdn.ru/forum/asm/4875241.1.aspxАвтор: ononim
Дата: 30.08.12
А>Ну и накой тогда проверка раз что то в памяти меняется не пойму ?
Ок, если оч хочется знать: имеется виртуальная файловая система сделанная на юзермодных хуках. То есть обхучено все начиная с ntdll!NtCreateFile
Файлмэпинги на виртуальные файлы реализованы через vectored exception handler. То есть делаем недоступную страничку, когда происходит к ней обращение — приходит исключение, срабатывает VEH prehandler, подчитывает из файла нужные данные, а если исключение на запись — еще и помечает нужный кусок размером N килобайт в своем кэше как 'dirty'. Все работает круто, но как обычно есть одно но: если поинтер на такой view передавать в системный сервис ядра, никакой VEH prehandler само по себе не вызовется, а тупо сервис вернет ошибку наружу. Потому сделано следующее — обхукана туева хуча системных сервисов, и все подозрительные буфера которые передаются им в параметрах предварительно "облапываются" в нужных местах, что приводит к срабатыванию VEH и все работает правильно.
Так вот я озадачился вопросом оптимизации облапывания.
А>RTFM !
сам такой