Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
 internal static extern MemoryMappingSafeHandle MapViewOfFile(
     SharedMemorySafeHandle fileMapping,
     MemoryMappedFileAccess desiredAccess,
     int fileOffsetHigh,
     int fileOffsetLow,
     int numberOfBytesToMap);