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);
    }