public void Run( RemoteHooking.IContext InContext, String InChannelName) { // install hook... try { //FileApis.InstallHook(); //ProcApis.InstallHook(); //RegApis.InstallHook(); NetApis.InstallHook(); } catch (Exception ExtInfo) { Interface.ReportException(ExtInfo); return; } Interface.IsInstalled(RemoteHooking.GetCurrentProcessId()); RemoteHooking.WakeUpProcess(); // wait for host process termination... try { while (true) { Thread.Sleep(500); // transmit newly monitored file accesses... if (Queue.Count > 0) { String[] Package = null; lock (Queue) { Package = Queue.ToArray(); Queue.Clear(); } Interface.Output(DateTime.Now, RemoteHooking.GetCurrentProcessId(), Package); } else { Interface.Ping(); } } } catch { // Ping() will raise an exception if host is unreachable } }