共享内存:MapViewOfFile returns 错误 5
Shared memory: MapViewOfFile returns error 5
我需要一种机制在一些线程之间共享内存(通常在同一个进程中,但有时不是)。
此代码看似非常基本,但在 MapViewOfFile
上因错误 5(拒绝访问)而失败:
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
使用权限 FILE_MAP_READ
. 打开句柄 hSharedMemOpened
成功
MapViewOfFile
使用权限 FILE_MAP_ALL_ACCESS
. 创建句柄 hSharedMemCreated
成功
MapViewOfFile
使用权限 FILE_MAP_ALL_ACCESS
. 打开的句柄 hSharedMemOpened
失败
答案在评论里:
PAGE_READWRITE
不是 OpenFileMapping()
的有效参数。您可能需要 FILE_MAP_ALL_ACCESS
。
我需要一种机制在一些线程之间共享内存(通常在同一个进程中,但有时不是)。
此代码看似非常基本,但在 MapViewOfFile
上因错误 5(拒绝访问)而失败:
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
使用权限FILE_MAP_READ
. 打开句柄 MapViewOfFile
使用权限FILE_MAP_ALL_ACCESS
. 创建句柄 MapViewOfFile
使用权限FILE_MAP_ALL_ACCESS
. 打开的句柄
hSharedMemOpened
成功
hSharedMemCreated
成功
hSharedMemOpened
失败
答案在评论里:
PAGE_READWRITE
不是 OpenFileMapping()
的有效参数。您可能需要 FILE_MAP_ALL_ACCESS
。