public static void Reprotect(IntPtr address, ulong size, MemoryProtection permission) { bool result; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { IntPtr sizeNint = new IntPtr((long)size); result = MemoryAllocWindows.Reprotect(address, sizeNint, permission); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { result = MemoryAllocUnix.Reprotect(address, size, permission); } else { throw new PlatformNotSupportedException(); } if (!result) { throw new MemoryProtectionException(permission); } }
public static bool Free(IntPtr address) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return(MemoryAllocWindows.Free(address)); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { return(MemoryAllocUnix.Free(address)); } else { throw new PlatformNotSupportedException(); } }
public static IntPtr AllocateWriteTracked(ulong size) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { IntPtr sizeNint = new IntPtr((long)size); return(MemoryAllocWindows.AllocateWriteTracked(sizeNint)); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { return(MemoryAllocUnix.Allocate(size)); } else { throw new PlatformNotSupportedException(); } }