MapViewOfFile
我使用 WinAPI 的功能遇到了这种情况。互联网搜索没有发现任何明显的修复,所以我将在这里分享我的问题和解决方案。
考虑以下代码段:
const char *name = "Global\\Object_Name";
unsigned long size = get_object_size();
HANDLE handle = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
size,
name);
if (!handle || handle == INVALID_HANDLE_VALUE)
exit(GetLastError());
bool created = GetLastError() == 0;
void *block = MapViewOfFile( handle,
FILE_MAP_ALL_ACCESS,
0,
0,
size);
if (block == NULL)
exit(GetLastError());
在一个特殊情况下,CreateFileMapping
成功返回了一个句柄。GetLastError
正在回归ERROR_ALREADY_EXISTS
,所以created == false
。现在,对 的调用MapViewOfFile
,使用与我传递给相同的大小CreateFileMapping
,返回NULL
并GetLastError
返回0x05
: ERROR_ACCESS_DENIED
。该进程以管理员权限运行。
MSDN 文档并没有真正提到会发生这种情况的任何原因。那么,为什么CreateFileMapping
成功了,却MapViewOfFile
失败了?