public bool WriteProtected <T>(IntPtr ptr, T value) where T : struct { using (var memoryOperation = new MemoryProtectionOperation(ptr, Marshal.SizeOf <T>())) { if (memoryOperation.Apply()) { return(Write(ptr, value)); } } return(false); }
public Detour(Delegate originalFunction, Delegate detourFunction, InProcessMemoryEditor memoryEditor = null) { OriginalFunction = originalFunction; OriginalFunctionPtr = Marshal.GetFunctionPointerForDelegate(OriginalFunction); DetourFunction = detourFunction; DetourFunctionPtr = Marshal.GetFunctionPointerForDelegate(DetourFunction); DetourInstructions = new List <byte>() { (byte)OpCodes.Push, (byte)OpCodes.Retn }; DetourInstructions.InsertRange(1, BitConverter.GetBytes(DetourFunctionPtr.ToInt32())); MemoryEditor = memoryEditor ?? new InProcessMemoryEditor(); MemoryOperation = new MemoryProtectionOperation(OriginalFunctionPtr, instructionLength); }