Мне нужен механизм для разделения памяти между некоторыми потоками (обычно в одном и том же процессе, но иногда нет).
Этот код, который кажется очень простым, завершается с ошибкой 5 (доступ запрещен) на MapViewOfFile
:
HANDLE hSharedMemCreated = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
10000, // maximum object size (low-order DWORD)
"testFileMapping"); // name of mapping object
HANDLE hSharedMemOpened = OpenFileMapping(
PAGE_READWRITE, // read/write access
FALSE,
"testFileMapping"
);
void* location = MapViewOfFile(
hSharedMemOpened, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
10);
MapViewOfFile
успешно с открытым дескриптором hSharedMemOpened
с разрешением FILE_MAP_READ
. MapViewOfFile
успешно с созданным дескриптором hSharedMemCreated
с разрешениемFILE_MAP_ALL_ACCESS
. MapViewOfFile
завершается с открытой ручкой hSharedMemOpened
с разрешением FILE_MAP_ALL_ACCESS
.