Исходные данные Mapped Region - PullRequest
0 голосов
/ 01 июля 2018

Я хочу создать отображенную в памяти область, используя CreateFileMapping без какой-либо конкретной привязки к файлу, но привязанной (используя MapViewOfFileEx) к определенному адресу памяти. Защита такого региона должна быть доступна только для чтения с самого начала. Тогда я не могу записать данные в такой регион. Если этот регион будет создан для конкретного дискового файла, исходные данные будут получены из содержимого файла. Как я могу заполнить эту область только для чтения начальными данными?

Пример:
Большинство процессов Windows имеют области памяти, которые отображаются (и не привязаны к какому-либо пути к файлу) и доступны только для чтения с момента создания, они содержат данные. Как это было достигнуто? Как эти регионы были заполнены данными?

1 Ответ

0 голосов
/ 01 июля 2018

существует только один способ сделать это - сначала раздел карты с PAGE_READWRITE, инициализировать его содержимое, возможно удалить, а затем сопоставить его снова - с защитой PAGE_READONLY. например

ULONG demo_map(PVOID BaseAddress, ULONG size, ULONG (*Init)(PVOID pv, ULONG size))
{
    ULONG dwError = NOERROR;
    if (HANDLE hSection = CreateFileMappingW(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, 0))
    {
        if (PVOID pv = MapViewOfFile(hSection, FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, 0))
        {
            dwError = Init(pv, size);
            UnmapViewOfFile(pv);
        }
        else
        {
            dwError = GetLastError();
        }

        if (!dwError)
        {
            dwError = MapViewOfFileEx(hSection, FILE_MAP_READ, 0, 0, 0, BaseAddress) ? NOERROR : GetLastError();
        }

        CloseHandle(hSection);
    }

    return dwError;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...