同等のWin32 API呼び出しは次のようになります。
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = FALSE;
HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, &sa, PAGE_READWRITE, 0, 10000, TEXT("ABC"));
if (!hMapping) ... // error handling
char *buffer = (char*) MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 10000);
if (!buffer) ... // error handling
// use buffer as needed...
UnmapViewOfFile(buffer);
CloseHandle(hMapping);
両方のアプリは、システムのカーネル内の同じマッピングオブジェクトへのアクセスを得るために同じlpName
値でCreateFileMapping()
を呼び出す必要があります。どちらのアプリでも最初にCreateFileMapping()
と呼ばれるオブジェクトが作成され、2番目のアプリケーションは既存のオブジェクトのハンドルを取得します。次に、MapViewOfFile()
は呼び出し元プロセス内のメモリアクセスをそのオブジェクトにマップします。このようにして、両方のアプリケーションが互いに共有メモリを使用しています。 1つのアプリがオブジェクトにデータを書き込むと、他のアプリはそのデータを表示します。
実際の質問は何ですか? –
'CreateFileMapping'と' MapViewOfFile'が何であるか知っていますか? –
@JonathanMee:WinAPIの機能:[CreateFileMapping](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v = vs.85).aspx)および[MapViewOfFile](https ://msdn.microsoft.com/en-us/library/windows/desktop/aa366761(v = vs.85).aspx)。 OP:あなたの目標は何ですか?もっと情報を提供してください。 –