Изменение загруженного ресурса Windows
Можно ли изменять загруженный в память ресурс?
Просто у меня достаточно большие данные, плюс это некоторая структура с указателями. Я сохраняю в файле не указатели, а смещения от его начала. Если я затем загружаю в память файл и выполняю соответствующий релокейтинг - все работает.
Но если я загружаю в память ресурс и получаю указатель через LockResource - то релокейтинг тут же вызывает аварийный останов с нарушением прав доступа (Код исключения 0xc0000005).
Как я понимаю, загруженный в память ресурс изменять нельзя. Копировать достаточно большой кусок прамяти (порядка 3 мегабайт) без возможности потом выгрузить из памяти оригинал я не хочу.
Как-то можно уговорить Windows разрешить мне изменить данные в загруженном в память ресурсе?
Ответы (1 шт):
Как подсказывают на англоязычном SO https://stackoverflow.com/questions/43239424/write-access-violation-when-trying-to-modify-array , ресурс вместе с самим exe загружается в read-only память.
Единственный способ изменить что-то — это предварительно скопировать в другой участок памяти.
Выгрузить ресурс из памяти тоже нельзя, FreeResource на современных версиях Windows ничего не делает, а UnlockResource уже даже не описана в справке, настолько она бесполезна.
Скорее всего вам придётся изменить архитектуру, и подгружать данные не через механизм ресурсов, а из обычного файла. Или придётся пожертвовать 3+ мегабайтами дополнительной памяти.