Событие запуска процесса с использованием WMI — обнаружены не все запуски процессов

Я использую следующий код C# в службе Windows (которая запускается как NT_AUTHORITY\SYSTEM) для создания обработчика событий для получения событий создания процесса ( с использованием WMI и WQL):

string queryString = "SELECT * FROM Win32_ProcessStartTrace";
ManagementEventWatcher watcher = new ManagementEventWatcher(new WqlEventQuery(queryString));
watcher.EventArrived += new EventArrivedEventHandler(ProcessStartEvent);
watcher.Start();

В ProcessStartEvent:

int processId = int.Parse(e.NewEvent.Properties["ProcessId"].Value.ToString());
Process proc = Process.GetProcessById(processId);

Out("Received process: " + proc.ProcessName);

У меня проблема в том, что (по какой-то странной причине) не каждый запуск процесса фиксируетсяи сообщается программы. Если я запущу около 6 процессов одновременно, один из них может не появиться в выходных данных.

Я попытался провести некоторое исследование по захвату событий создания процесса с помощью WMI, но доступной информации мало. Я видел что также возможно захватить запуск процесса, используя что-то вроде:

SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN  2
WHERE TargetInstance ISA 'Win32_Process'

(как показано в этом Stack Ove rflow answer)

Существуют ли существенные различия между использованием __InstanceCreationEventи Win32_ProcessStartTrace? Может ли это быть причиной моих проблем?

Есть ли объяснение, почему я не получаю событиядля всехпроцессов? Есть ли что-то более очевидное, что я делаю неправильно здесь?

8
задан Community 23 May 2017 в 12:10
поделиться