0
我嘗試寫入文件,而將文件從另一個進程映射爲文件時打開,並且失敗。FileMapped寫入訪問
請看看代碼片段:
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);
然後,我不能再重寫文件。
我做錯了什麼?