ビュー (pMap、pMap2) データを互いにオーバーライドしないように保護することは可能ですか?
または、手動で行う必要がありますか?
たとえば、コードを実行すると、ファイル データはすべて「1」になります。
ソースコード
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
HANDLE hFile = CreateFile("temp", GENERIC_EXECUTE | GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
// error check
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_EXECUTE_READWRITE, 0, systemInfo.dwAllocationGranularity*2, "awMapMemory");
// error check
LPVOID pMap = MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, systemInfo.dwAllocationGranularity);
LPVOID pMap2 = MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, systemInfo.dwAllocationGranularity, systemInfo.dwAllocationGranularity);
// error check
__try
{
for(int i = 0; i < systemInfo.dwAllocationGranularity; i++)
*((char*)pMap2 + i) = 2;
for(int i = 0; i < systemInfo.dwAllocationGranularity + systemInfo.dwAllocationGranularity; i++)
*((char*)pMap + i) = 1;
FlushViewOfFile(pMap, 0);
}
__except (GetExceptionCode() == EXCEPTION_IN_PAGE_ERROR ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
// error
}
UnmapViewOfFile(pMap);
CloseHandle(hMap);
CloseHandle(hFile);
return 0;
}