Ich bin mit WinAPIs MapViewOfFile
-Funktion auf diese Situation gestoßen. Eine Internetsuche hat keine offensichtlichen Korrekturen ergeben, deshalb werde ich hier mein Problem und meine Lösung teilen.Warum schlägt MapViewOfFile mit ERROR_ACCESS_DENIED fehl?
Betrachten Sie das folgende Snippet:
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());
In einem besonderen Fall CreateFileMapping
erfolgreich einen Griff zurückkehrte. GetLastError
wurde ERROR_ALREADY_EXISTS
zurückgegeben, also created == false
. Nun gibt der Aufruf an MapViewOfFile
unter Verwendung derselben Größe, die ich an CreateFileMapping
übergab, NULL
zurück und GetLastError
gibt 0x05
zurück: ERROR_ACCESS_DENIED
. Der Prozess wurde mit Administratorrechten ausgeführt.
Die MSDN-Dokumentation erwähnt keinen Grund wirklich, warum diese Situation auftreten würde. Warum funktioniert CreateFileMapping
erfolgreich, aber MapViewOfFile
scheitern?