Exemplo n.º 1
0
        /// <summary>
        /// Opens a client with dynamic multi-clienting support
        /// </summary>
        public static Client OpenMC(string path, string arguments)
        {
            Util.WinApi.PROCESS_INFORMATION pi = new Tibia.Util.WinApi.PROCESS_INFORMATION();
            Util.WinApi.STARTUPINFO         si = new Tibia.Util.WinApi.STARTUPINFO();

            if (arguments == null)
            {
                arguments = "";
            }

            Util.WinApi.CreateProcess(path, " " + arguments, IntPtr.Zero, IntPtr.Zero,
                                      false, Util.WinApi.CREATE_SUSPENDED, IntPtr.Zero,
                                      System.IO.Path.GetDirectoryName(path), ref si, out pi);

            IntPtr  handle = Util.WinApi.OpenProcess(Util.WinApi.PROCESS_ALL_ACCESS, 0, pi.dwProcessId);
            Process p      = Process.GetProcessById(Convert.ToInt32(pi.dwProcessId));

            Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJMP);
            Util.WinApi.ResumeThread(pi.hThread);
            p.WaitForInputIdle();
            Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJNZ);
            Util.WinApi.CloseHandle(handle);
            Util.WinApi.CloseHandle(pi.hProcess);
            Util.WinApi.CloseHandle(pi.hThread);

            return(new Client(p));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Opens a client with dynamic multi-clienting support
        /// </summary>
        public static Client OpenMC(string path, string arguments)
        {
            Util.WinApi.PROCESS_INFORMATION pi = new Tibia.Util.WinApi.PROCESS_INFORMATION();
            Util.WinApi.STARTUPINFO si = new Tibia.Util.WinApi.STARTUPINFO();

            if (arguments == null)
                arguments = "";

            Util.WinApi.CreateProcess(path, " " + arguments, IntPtr.Zero, IntPtr.Zero,
                false, Util.WinApi.CREATE_SUSPENDED, IntPtr.Zero,
                System.IO.Path.GetDirectoryName(path), ref si, out pi);

            IntPtr handle = Util.WinApi.OpenProcess(Util.WinApi.PROCESS_ALL_ACCESS, 0, pi.dwProcessId);
            Process p = Process.GetProcessById(Convert.ToInt32(pi.dwProcessId));
            Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJMP);
            Util.WinApi.ResumeThread(pi.hThread);
            p.WaitForInputIdle();
            Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJNZ);
            Util.WinApi.CloseHandle(handle);
            Util.WinApi.CloseHandle(pi.hProcess);
            Util.WinApi.CloseHandle(pi.hThread);

            return new Client(p);
        }