等效的 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);
两个应用程序必须调用CreateFileMapping()
相同的lpName
值才能访问系统内核中的相同映射对象。无论哪个应用程序首先调用CreateFileMapping()
都会创建对象,而第二个应用程序将获得现有对象的句柄。然后,MapViewOfFile()
将调用进程内的内存访问映射到该对象。这样,两个应用程序都在使用彼此共享的内存。当一个应用程序将数据写入对象时,另一个应用程序将看到它。