существует только один способ сделать это - сначала раздел карты с 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;
}