Можно ли защитить не закрепленный управляемый массив? - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно защитить управляемый массив от записи. Я могу сделать это, позвонив в VirtualProtect. Но GC может выполнять компактную управляемую память и перемещать нефиксированный массив в другое место. Будут ли переданы права доступа или GC ничего о них не знает? Есть ли способ защитить не записанный управляемый массив от записи в этом случае?

Обновление 1: enter image description here

Обновление 2: GC.Alloc не помогает. Любая попытка поместить атрибут ReadOnly на страницу памяти приводит к тому, что GC выдает исключение.

1 Ответ

1 голос
/ 12 июля 2019

Работает.

Проблема в том, что VirtualProtect блокирует целые страницы памяти. Управляемые массивы не выровнены по границе страницы. Таким образом, VirtualProtect касается памяти, которая не принадлежит массиву.

...