Общая память: MapViewOfFile возвращает ошибку 5 - PullRequest
0 голосов
/ 02 октября 2018

Мне нужен механизм для разделения памяти между некоторыми потоками (обычно в одном и том же процессе, но иногда нет).

Этот код, который кажется очень простым, завершается с ошибкой 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.

1 Ответ

0 голосов
/ 02 октября 2018

Ответ в комментариях:

PAGE_READWRITE не является допустимым аргументом для OpenFileMapping().Вы, вероятно, хотите FILE_MAP_ALL_ACCESS вместо.

...