private SharedMemoryMapView(SharedMemorySafeHandle sharedMemoryHandle, ulong sharedMemorySize) { this.sharedMemoryHandle = sharedMemoryHandle; memoryMappingHandle = Native.MapViewOfFile( sharedMemoryHandle, Native.MemoryMappedFileAccess.FileMapAllAccess, fileOffsetHigh: 0, fileOffsetLow: 0, numberOfBytesToMap: (int)sharedMemorySize); Buffer = memoryMappingHandle.DangerousGetHandle(); MemSize = sharedMemorySize; }
/// <summary> /// Opens an existing shared memory view. /// </summary> /// <param name="sharedMemoryMapName"></param> /// <param name="sharedMemorySize"></param> /// <returns></returns> public static new SharedMemoryMapView OpenExisting(string sharedMemoryMapName, ulong sharedMemorySize) { SharedMemorySafeHandle sharedMemoryHandle = Native.OpenFileMapping( Native.MemoryMappedFileAccess.FileMapRead | Native.MemoryMappedFileAccess.FileMapWrite, false, sharedMemoryMapName); if (sharedMemoryHandle.IsInvalid) { throw new FileNotFoundException( $"Failed to OpenFileMapping {sharedMemoryMapName}", innerException: new Win32Exception(Marshal.GetLastWin32Error())); } Security.VerifyHandleOwner(sharedMemoryHandle); return(new SharedMemoryMapView(sharedMemoryHandle, sharedMemorySize)); }
internal static extern MemoryMappingSafeHandle MapViewOfFile( SharedMemorySafeHandle fileMapping, MemoryMappedFileAccess desiredAccess, int fileOffsetHigh, int fileOffsetLow, int numberOfBytesToMap);