0

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

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

  • 使用 CPU 性能计数器,假设 LogMeInRC.exe 在会话期间的 CPU 使用率明显更高。这种方法能够检测到一些会话,但是错误率太高了。
  • 通过监视性能计数器IO Write Bytes/sIO Data Bytes/sLogMeIn。这仅在最初有效。如果会话超过一分钟,这些性能计数器不会记录任何活动,即使 LogMeIn 仍然有网络流量。

有什么提示吗?

4

1 回答 1

1

Solved it by intercepting ETW traces:

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();
}

This way I get the number of UDP Sends by the LogMeIn process, which is perfect for detecting LogMeIn sessions.

于 2014-05-27T08:56:48.473 回答