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
れます。プロセスは管理者権限で実行されていました。GetLastError
0x05
ERROR_ACCESS_DENIED
MSDN のドキュメントには、この状況が発生する理由についてはまったく言及されていません。では、なぜCreateFileMapping
成功するのにMapViewOfFile
失敗するのでしょうか。