public Main( RemoteHooking.IContext InContext, string serverName ) { mySendClientQueue = new Queue<Packet>(); mySendClientLock = new object(); mySendServerQueue = new Queue<Packet>(); mySendServerLock = new object(); myRecvFilter = new bool[256]; mySendFilter = new bool[256]; myRecvDelegate = new dSendRecv( ReceiveHook ); mySendDelegate = new dSendRecv( SendHook ); myPID = RemoteHooking.GetCurrentProcessId(); myThreadID = RemoteHooking.GetCurrentThreadId(); myDateStamp = GetDateStamp(); myServerSendBuffer = Marshal.AllocHGlobal( 65536 ); myClientSendBuffer = Marshal.AllocHGlobal( 65536 ); myServerBufferAddress = BitConverter.GetBytes( myServerSendBuffer.ToInt32() ); myClientBufferAddress = BitConverter.GetBytes( myClientSendBuffer.ToInt32() ); myClientInstance = new ClientInstance( serverName, true ); myClientInstance.SendCommand( Command.ClientID, myPID ); myClientInstance.SendPacketEvent += new dSendPacket( myClientInstance_sendPacketEvent ); myClientInstance.PingEvent += new dPing( myClientInstance_pingEvent ); myClientInstance.AddRecvFilterEvent += new dAddRecvFilter( myClientInstance_addRecvFilterEvent ); myClientInstance.AddSendFilterEvent += new dAddSendFilter( myClientInstance_addSendFilterEvent ); myClientInstance.RemoveRecvFilterEvent += new dRemoveRecvFilter( myClientInstance_removeRecvFilterEvent ); myClientInstance.RemoveSendFilterEvent += new dRemoveSendFilter( myClientInstance_removeSendFilterEvent ); myClientInstance.ClearRecvFilterEvent += new dClearRecvFilter( myClientInstance_clearRecvFilterEvent ); myClientInstance.ClearSendFilterEvent += new dClearSendFilter( myClientInstance_clearSendFilterEvent ); }
public static void Initialize(ClientInstance clientInstance) { myWindowHandle = Process.GetCurrentProcess().MainWindowHandle; myClientInstance = clientInstance; myMsgHook = new NativeMethods.HookProc(MsgHook); myWindowMsgHook = new NativeMethods.HookProc(WindowMsgHook); Process p = Process.GetProcessById(EasyHook.RemoteHooking.GetCurrentProcessId()); uint x; uint threadID = NativeMethods.GetWindowThreadProcessId(p.MainWindowHandle, out x); /* Use user32.dll as SetWindowHookEx hMod as per http://stackoverflow.com/questions/17897646/gma-useractivitymonitor-setwindowshookex-error-126 */ IntPtr user32 = NativeMethods.LoadLibrary("user32.dll"); myMsgHookHandle = NativeMethods.SetWindowsHookEx(NativeMethods.WH_GETMESSAGE, Marshal.GetFunctionPointerForDelegate(myMsgHook), /*Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0])*/user32, threadID); #if DEBUG if (myMsgHookHandle == IntPtr.Zero) { clientInstance.SendCommand(Command.Message, "Error installing WH_GETMESSAGE hook, GetLastError = " + Marshal.GetLastWin32Error().ToString()); } #endif myWindowMsgHookHandle = NativeMethods.SetWindowsHookEx(NativeMethods.WH_CALLWNDPROC, Marshal.GetFunctionPointerForDelegate(myWindowMsgHook), /*Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0])*/user32, threadID); #if DEBUG if (myWindowMsgHookHandle == IntPtr.Zero) { clientInstance.SendCommand(Command.Message, "Error installing WH_CALLWNDPROC hook, GetLastError = " + Marshal.GetLastWin32Error().ToString()); } #endif NativeMethods.WINDOWPLACEMENT wp = new NativeMethods.WINDOWPLACEMENT(); if (NativeMethods.GetWindowPlacement(myWindowHandle, ref wp)) { MessageHook.myWindowX = wp.rcNormalPosition.X; MessageHook.myWindowY = wp.rcNormalPosition.Y; } if (myMsgHookHandle == IntPtr.Zero || myWindowMsgHookHandle == IntPtr.Zero) { clientInstance.SendCommand(Command.Message, "Error installing WH_GETMESSAGE\\WH_CALLWNDPROC hooks!"); } }