如果存在LogMeIn远程会话,则以编程方式检测

时间:2014-05-27 07:01:00

标签: windows windows-8 logmein

有没有办法以编程方式检测当前Windows PC /用户上是否存在LogMeIn会话?

我已经尝试过几种方式(在C#中,但语言无关紧要):

  • 使用CPU性能计数器,假设LogMeInRC.exe的CPU使用率在会话期间大幅提高。这种方法能够检测到一些会话,但错误率太高了。
  • 通过监控LogMeIn的性能计数器IO Write Bytes/sIO Data Bytes/s。这最初只能起作用。如果会话超过一分钟,则这些性能计数器不会记录任何活动,即使LogMeIn仍有网络流量。

任何提示?

1 个答案:

答案 0 :(得分:1)

通过拦截ETW痕迹来解决它:

var logmeinProcess = System.Diagnostics.Process.GetProcessesByName("LogMeIn").Single();
using (var session = new TraceEventSession("MyRealTimeSession"))         // Create a session to listen for events
{
    session.EnableKernelProvider(Microsoft.Diagnostics.Tracing.Parsers.KernelTraceEventParser.Keywords.NetworkTCPIP);
    session.Source.Kernel.UdpIpSend += (data) =>
    {
        if (data.ProcessID == logmeinProcess.Id)
        {
            lock (_logMeInUdpQueue)
            {
                _logMeInUdpQueue.Enqueue(DateTime.UtcNow);
            }
        }
    };

    session.Source.Process();
}

这样我就可以通过LogMeIn进程获得UDP发送的数量,这非常适合检测LogMeIn会话。