Exemple #1
0
        /// <summary>
        /// Creates a memory-mapped file from a file on disk.
        /// </summary>
        /// <param name="path">The path to file to map.</param>
        /// <returns>A memory-mapped file.</returns>
        public static FileMappingWrapper CreateFromFile(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException("path wrong");
            }
            if (!File.Exists(path))
            {
                throw new ArgumentNullException("file doesn't exists");
            }

            using (var file = File.Open(path, FileMode.Open, FileAccess.ReadWrite))
            {
                FileMappingAccess   rights   = new FileMappingAccess();
                FileMappingSecurity security = new FileMappingSecurity();

                return(CreateFromFile(
                           file,
                           Guid.NewGuid().ToString(),
                           file.Length,
                           rights,
                           security,
                           HandleInheritability.Inheritable,
                           true // TODO: уточнить
                           ));
            }
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileStream"></param>
        /// <param name="mapName"></param>
        /// <param name="capacity"></param>
        /// <param name="access"></param>
        /// <param name="memoryMappedFileSecurity"></param>
        /// <param name="inheritability"></param>
        /// <param name="leaveOpen"></param>
        /// <returns></returns>
        public static FileMappingWrapper CreateFromFile(
            FileStream fileStream,
            string mapName,
            long capacity,
            FileMappingAccess access,
            FileMappingSecurity memoryMappedFileSecurity,
            HandleInheritability inheritability,
            bool leaveOpen
            )
        {
            if (fileStream == null || fileStream.SafeFileHandle.IsInvalid ||
                string.IsNullOrEmpty(mapName))
            {
                throw new ArgumentNullException("fileStream or mapname is null");
            }

            SafeFileMappingHandle handle = new SafeFileMappingHandle(Win32.CreateFileMapping(
                                                                         fileStream.SafeFileHandle,
                                                                         IntPtr.Zero,
                                                                         Win32.PAGE_READWRITE,
                                                                         0,
                                                                         unchecked ((UInt32)capacity),
                                                                         mapName
                                                                         )
                                                                     );

            if (handle.IsInvalid)
            {
                throw new Exception("Could not create memory-mapped file.");
            }

            // throws
            // ArgumentException
            // ArgumentNullException
            // ArgumentOutOfRangeException
            // ObjectDisposedException
            // UnauthorizedAccessException
            // IOException
            var wrapper = new FileMappingWrapper(handle);

            wrapper.fileSize = fileStream.Length;

            return(wrapper);
        }
Exemple #3
0
 public static extern SafeViewOfFileHandle MapViewOfFile(SafeFileMappingHandle hFileMappingObject,
                                                         [MarshalAs(UnmanagedType.U4)] FileMappingAccess dwDesiredAccess,
                                                         uint dwFileOffsetHigh,
                                                         uint dwFileOffsetLow,
                                                         uint dwNumberOfBytesToMap);
Exemple #4
0
 public static extern SafeFileMappingHandle OpenFileMapping([MarshalAs(UnmanagedType.U4)] FileMappingAccess dwDesiredAccess,
                                                            bool bInheritHandle,
                                                            string lpName);