internal bool addUserHook(UserHook userHook) { if (!isConnected) { return(false); } if (Settings.session.isHookAlreadyInstalled(userHook)) { return(false); } bool ok; if (isCompat) { ok = TextHookInteropCompat.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK; } else { ok = TextHookInterop.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK; } if (ok) { Settings.session.addUserHook(userHook); } return(ok); }
internal bool removeUserHook(UserHook hook) { if (!isConnected) { return(false); } if (!Settings.session.removeUserHook(hook)) { return(false); } bool ok = true; Thread removingThread = new Thread(new ThreadStart(() => { if (isCompat) { ok = TextHookInteropCompat.TextHookRemoveHook(hook.addr) == OK; } else { ok = TextHookInterop.TextHookRemoveHook(hook.addr) == OK; } })); removingThread.IsBackground = true; removingThread.Start(); if (removingThread.Join(1000)) { return(ok); } else { removingThread.Abort(); Logger.log("Freeze trying to remove hook: " + hook.code); return(true); } }
internal bool removeUserHook(UserHook userHook) { lock (this) { bool ok = userHooks.Remove(userHook); if (ok) { isDirty = true; } } return isDirty; }
internal bool isHookAlreadyInstalled(UserHook userHook) { return userHooks.Any((h) => h.addr == userHook.addr); }
internal void addUserHook(UserHook userHook) { lock (this) { userHooks.Add(userHook); isDirty = true; } }
internal bool removeUserHook(UserHook hook) { if (!isConnected) { return false; } if (!Settings.session.removeUserHook(hook)) { return false; } bool ok = true; Thread removingThread = new Thread(new ThreadStart(() => { if (isCompat) { ok = TextHookInteropCompat.TextHookRemoveHook(hook.addr) == OK; } else { ok = TextHookInterop.TextHookRemoveHook(hook.addr) == OK; } })); removingThread.IsBackground = true; removingThread.Start(); if (removingThread.Join(1000)) { return ok; } else { removingThread.Abort(); Logger.log("Freeze trying to remove hook: " + hook.code); return true; } }
internal bool addUserHook(UserHook userHook) { if (!isConnected) { return false; } if (Settings.session.isHookAlreadyInstalled(userHook)) { return false; } bool ok; if (isCompat) { ok = TextHookInteropCompat.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK; } else { ok = TextHookInterop.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK; } if (ok) { Settings.session.addUserHook(userHook); } return ok; }