-2
  • ビュー (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;
}
4

1 に答える 1