MmMapLockedPagesSpecifyCache + CoW

Тема в разделе "WASM.BEGINNERS", создана пользователем HoShiMin, 6 янв 2019.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    А мы никак не можем гарантировать синхронность и консистентность (и нужно ли в контексте кернель-либы, которая делает страшное зло), НО!
    Допустим, ты хочешь поменять что-то в пте, будучи уверенным, что никто в этот момент с пте не работает. Посылаешь всем процессорам (ядрам), кроме активного, DPC, заставляя их ждать, а на своём процессоре в этот момент задираешь IRQL или лочишь прерывания и спокойно меняешь пте. Чем не вариант?

    А если говорить об именно CoW, то, т.к. за сам процесс подгрузки страницы (и за соответствующую синхронизацию) отвечает операционка, а от нас требуется лишь взвести 2 бита и обратиться к странице на запись, думаю, очень маловероятно, что в промежутке между взведением битов и записью нами в страницу произойдёт чья-то запись со стороны - ведь, коль скоро страница с CoW, то она изначально была ридонли - и камон! - кто, кроме нас, будет писать в ридонли память? Думаю, этот кейс можно спокойно опустить. И даже если он случится, для нас не произойдёт ничего страшного. Схватим AV и поймаем в try..except, но страница уже будет в целевом процессе, а большего нам и не нужно.
     
    UbIvItS нравится это.