Я столкнулся с этой ситуацией с помощью функции MapViewOfFile
от WinAPI. Поиск в Интернете не выявил никаких явных исправлений, поэтому я расскажу о своей проблеме и решении.Почему MapViewOfFile не работает с ERROR_ACCESS_DENIED?
Рассмотрим следующий фрагмент кода:
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
терпят неудачу?