別のプロセスからマップされたファイルとして開かれているときにファイルに書き込もうとすると、失敗します。
コードの断片を見てください:
access = GENERIC_READ | GENERIC_WRITE;
share = FILE_SHARE_READ | FILE_SHARE_WRITE;
disposition = OPEN_EXISTING;
HANDLE fileHandle = CreateFileA(fileName.c_str(), access, share, 0, disposition, 0);
//...
unsigned long valProtect = 0;
//...
valProtect = PAGE_READWRITE;
//...
const HANDLE mappingHandle = CreateFileMapping(fileHandle, 0, valProtect, 0, 0, 0);
//...
this->m_access = FILE_MAP_ALL_ACCESS;
//...
this->m_startAddress = (uint8_t*)MapViewOfFile(mappingHandle, this->m_access, 0, 0, 0);
//...
CloseHandle(fileHandle);
この時点で、ファイルは閉じられていますが (ハンドルです)、アドレス空間にマップされています。このファイルをメモ帳 ++ で開き、変更して保存しようとしましたが、次のメッセージが表示されます。
「このファイルが別のプログラムで開かれていないか確認してください。」
そのため、別のプロセスから書き換えることはできません。書き込み権限がロックされているようです。
次のようなファイルのマッピングを解除した場合:
UnmapViewOfFile(this->m_startAddress);
その後、ファイルを再度書き換えることはできません。
私は何を間違えましたか?