bool TryHookTransfer(string typeName, out LocalHook hook) { if (ProgramDatabase.TryGetAddressForSymbol($"?VirtualRedirectTransfer@{typeName}@@UEAAXAEAVGenerateTypeTreeTransfer@@@Z", out var original) && ProgramDatabase.TryGetAddressForSymbol($"??$Transfer@VGenerateTypeTreeTransfer@@@{typeName}@@IEAAXAEAVGenerateTypeTreeTransfer@@@Z", out var transfer)) { LocalHook.Release(); hook = LocalHook.CreateUnmanaged(original, transfer, IntPtr.Zero); hook.ThreadACL.SetInclusiveACL(new[] { 0 }); return(true); } hook = null; return(false); }