2016-09-01 2 views
-1

Я пытаюсь контролировать создание и прекращение любых процессов без прав администратора! я нашел много размещены примеры, как этот:Мониторинг создания и завершения процесса

// query every 2 seconds 
string pol = "2"; 

WqlEventQuery queryString = new WqlEventQuery(
    "SELECT *" + 
    " FROM __InstanceOperationEvent " + 
    "WITHIN " + pol + 
    " WHERE TargetInstance ISA 'Win32_Process' "); 

// You could replace the dot by a machine name to watch to that machine 
ManagementScope scope = new ManagementScope(@"\\.\root\CIMV2"); 

// create the watcher and start to listen 
watcher = new ManagementEventWatcher(scope, queryString); 
watcher.EventArrived += OnEventArrived; 
watcher.Start(); 

Если бы я только получить событие я могу определить, если процесс был запущен или остановлен, но если я пытаюсь потреблять e.NewEvent.Property["ProcessName"].Value в OnEventArrived у меня проблемы с права доступа.

Мой вопрос: Почему я могу получить информацию о создании и завершении в целом, но если я хочу получить информацию из события, я ограничусь?

Я могу использовать Process.GetProcesses() и сравнивать эту информацию с любыми предыдущими значениями, которые я получаю самостоятельно, поэтому я могу получить эту информацию в любом случае. Мне кажется, что мне не нужны права доступа.

+0

Сценарий Powershell был бы значительным вариантом вместо C# для мониторинга процессов ... – JDavila

+0

@JDavila да, если у вас нет клиента, который хотел бы увидеть небольшой зеленый знак в приложении для всех процессов, которые он хотел бы отслеживать;) – GreenEyedAndy

ответ

0

Для доступа к определенным процессам должны быть созданы права администратора для этого конкретного процесса или административная учетная запись, которая существует в группе, которая может обращаться к процессам, вызывающим озабоченность.

«Вы не можете получить доступ к ресурсам процесса только через имя процесса, но после того, как вы извлекли массив компонентов Процесса, связанных с ресурсами процесса, вы можете запускать, завершать и иным образом манипулировать системными ресурсами».

От: https://msdn.microsoft.com/en-us/library/z3w4xdc9(v=vs.110).aspx

По сути, массив процессов должен быть создан в массиве C# для доступа и изменения процессов.

Детали процесса, скорее всего, требуют более высокого уровня доступа или разрешений. Доступ к объектам основан на разных уровнях, таких как информация, ошибка и т. Д. Обычно при аутентификации Windows пользователю требуются права доступа к этому объекту до того, как может произойти какой-либо другой тип модификации.

+0

Благодарим вас за быстрый ответ, но вы знаете, что даже возможно получить параметр командной строки для любого запущенного процесса, и поэтому я не знаю, почему нет простого способа получить информацию о том, что, например, notepad.exe был запущен без прав администратора или настройки Watcher для каждого имени файла, который я хотел бы отслеживать. – GreenEyedAndy

Смежные вопросы