Определять программно, если есть удаленный сеанс 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.