Задался этим вопросом, решил не экспериментировать, а тупо посмотреть дебаггером как это делает СЕ. Увидел интересную картину:
VirtualProtectEx с флагом "PAGE_EXECUTE_READWRITE"
WriteProcessMemory с замороженным значением
VirtualProtectEx с флагом "PAGE_READWRITE"
И так по кругу, разумеется, с огромной скоростью. И собственно не понимаю что за игра флагами идёт? Оба флага позволяют запись, то есть приложение может писать по этому адресу так или иначе. При этом зачем первый флаг, если для WriteProcessMemory флаг исполнения совершенно не важен. В общем, какая логика в этом цикле? И может тупо выставить PAGE_READONLY?