private static IntPtr CreateFileMapping(string name, int size, bool writable) { IntPtr intPtr = IntPtr.Zero; IntPtr intPtr2 = IntPtr.Zero; int flProtect; if (writable) { flProtect = 4; } else { flProtect = 2; } IntPtr result; try { intPtr = FileMapping.GetSecurityDescriptor(name); FileMapping.SECURITY_ATTRIBUTES security_ATTRIBUTES = new FileMapping.SECURITY_ATTRIBUTES(); security_ATTRIBUTES.SecurityDescriptor = intPtr; security_ATTRIBUTES.InheritHandle = false; intPtr2 = FileMapping.CreateFileMapping((IntPtr)(-1), security_ATTRIBUTES, flProtect, 0, size, name); if (intPtr2 == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not create file mapping where file mapping name is : " + name); } result = intPtr2; } finally { if (intPtr != IntPtr.Zero) { FileMapping.LocalFree(intPtr); } } return(result); }
internal static extern IntPtr CreateFileMapping(IntPtr hFile, FileMapping.SECURITY_ATTRIBUTES lpFileMappingAttributes, int flProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName);