internal static void InjectUoMod() { if (Engine.ClientMajor < 7) { return; } if (Engine.ClientBuild > 49) { return; } String path = AppDomain.CurrentDomain.BaseDirectory + "\\UOMod.dll"; IntPtr hp = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, true, ClientCommunication.GetUOProcId()); if (hp != IntPtr.Zero) { IntPtr hProcess = IntPtr.Zero; IntPtr hThread = IntPtr.Zero; IntPtr pszLibFileRemote = IntPtr.Zero; try { hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | // Required by Alpha PROCESS_CREATE_THREAD | // For CreateRemoteThread PROCESS_VM_OPERATION | // For VirtualAllocEx/VirtualFreeEx PROCESS_VM_WRITE | // For WriteProcessMemory PROCESS_VM_READ, false, ClientCommunication.GetUOProcId()); if (hProcess == IntPtr.Zero) { return; } int cch = 1 + lstrlen(path); int cb = cch * sizeof(char); pszLibFileRemote = VirtualAllocEx(hProcess, IntPtr.Zero, (uint)cb, MEM_COMMIT, PAGE_READWRITE); if (pszLibFileRemote == IntPtr.Zero) { return; } UIntPtr bytesWritten; if (!WriteProcessMemory(hProcess, pszLibFileRemote, Encoding.Default.GetBytes(path), (uint)((path.Length + 1) * Marshal.SizeOf(typeof(char))), out bytesWritten)) { return; } IntPtr pfnThreadRtn = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA"); if (pfnThreadRtn == IntPtr.Zero) { return; } hThread = CreateRemoteThread(hProcess, IntPtr.Zero, 0, pfnThreadRtn, pszLibFileRemote, 0, IntPtr.Zero); if (hThread == IntPtr.Zero) { return; } WaitForSingleObject(hThread, int.MaxValue); } finally { if (pszLibFileRemote != IntPtr.Zero) { VirtualFreeEx(hProcess, pszLibFileRemote, 0, FreeType.MEM_RELEASE); } if (hThread != IntPtr.Zero) { CloseHandle(hThread); } if (hProcess != IntPtr.Zero) { CloseHandle(hProcess); } } } // Thread attesa che la windowhandle sia disponibile new Thread(() => { Thread.CurrentThread.IsBackground = true; Thread.Sleep(1500); m_modhandle = FindWindow("UOModWindow_" + ClientCommunication.FindUOWindow().ToString("x8").ToUpper(), null); if (m_modhandle != IntPtr.Zero) { EnableOnStartMod(); } }).Start(); }