WinAPIのMapViewOfFile機能でこの状況に遭遇しました。インターネットで検索しても明らかな修正が見つからなかったので、ここで私の問題と解決策を共有します。
次のスニペットを検討してください。
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れます。プロセスは管理者権限で実行されていました。GetLastError0x05ERROR_ACCESS_DENIED
MSDN のドキュメントには、この状況が発生する理由についてはまったく言及されていません。では、なぜCreateFileMapping成功するのにMapViewOfFile失敗するのでしょうか。