Самый простой способ - использовать WMI. Специально следить за Win32_ProcessStartTrace. Это лучше, чем Win32_Process, потому что он настроен на использование событий, тогда как Win32_Process требует опроса, который требует больше ресурсов процессора. Ниже описано, как это сделать в C #. Сначала убедитесь, что System.Management настроен как справочник для вашего проекта.
public System.Management.ManagementEventWatcher mgmtWtch;
public Form1()
{
InitializeComponent();
mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
mgmtWtch.Start();
}
void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
MessageBox.Show((string)e.NewEvent["ProcessName"]);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mgmtWtch.Stop();
}
Код будет генерировать окно сообщения при каждом запуске нового процесса. Оттуда вы можете проверить белый / черный список и действовать соответствующим образом.