Определять программно, если есть удаленный сеанс LogMeIn

Есть ли способ программно определить, есть ли сеанс LogMeIn на текущем ПК / пользователе Windows?

Я пробовал это несколькими способами (в C#, но язык не имеет значения):

  • Используя счетчик производительности ЦП, предполагая, что использование ЦП LogMeInRC.exe было значительно выше во время сеанса. Этот подход может обнаружить некоторые сеансы, но уровень ошибок слишком высок.
  • Контролируя счетчики производительности IO Write Bytes/s или же IO Data Bytes/s LogMeIn. Это работает только изначально. Если сеанс старше минуты, эти счетчики производительности не регистрируют какую-либо активность, даже если LogMeIn все еще имеет сетевой трафик.

Есть намеки?

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

Таким образом, я получаю количество отправок UDP процессом LogMeIn, который идеально подходит для обнаружения сеансов LogMeIn.

Другие вопросы по тегам