Если вас устроит решение (или по крайней мере, подсказка, в какую сторону смотреть) на CMD/BAT, то:
1) tasklist /FO CSV>outfile.txt - дамп процессов в виде, удобном для последущей обработки.
2) На основании нижеприведенного кода соорудить мониторилку процессов, запускающуюся с некой периодичностью, скажем, раз в пять секунд и проверяющую запущенные процессы на соответствие эталону.
Показать код
Код:

@Echo Off
:: Завершает не указанные в "белом списке" процессы
:: Anonymous, 2011
SetLocal EnableDelayedExpansion EnableExtensions
:: Файл со списком разрешённых процессов
Set WhitelistFile=%~sdp0whitelist.txt
:: Получение PID своего процесса
Set WinTitle=%Random%%Random%
Title %WinTitle%
For /F "tokens=2 skip=2 delims=," %%P In ('tasklist /FI "WINDOWTITLE eq %WinTitle%" /FO CSV') Do (Set MyPID=%%~P)
Title %~n0
:: Чтение файла со списком разрешённых процессов
If Exist "%WhitelistFile%" (
For /F "tokens=*" %%w In (%WhitelistFile%) Do (Set WhiteList=%%w:!WhiteList!)
) Else (
Set WhiteList=explorer.exe:csrss.exe:ctfmon.exe:lsass.exe:services.exe:smss.exe:svchost.exe:tasklist.exe:taskmgr.exe:VistaDrv.exe:winlogon.exe:wmiprvse.exe:
)
:: Получение списка процессов (без дублей)
For /F "tokens=1 skip=5 delims=," %%p In ('tasklist /FO CSV') Do (Echo :!ProcList!|Find /I ":%%~p:">nul||Set ProcList=%%~p:!ProcList!)
:: Сравнение списков
:Compare
For /F "tokens=1,* delims=:" %%C In ("!ProcList!") Do (
If Not "%%C"=="" (
Echo :!WhiteList!|Find /I ":%%C:">nul||Call :Kill "%%C"
Set ProcList=%%D
GoTo Compare
)
)
Exit
:: Завершение процессов
:Kill
If "%~1"=="cmd.exe" (
TaskKill /F /FI "PID ne %MyPID%" /FI "IMAGENAME eq cmd.exe"
) Else (
TaskKill /F /IM "%~1"
)
Exit /B
"Имитировать действия пользователя" с помощью nircmd от nirsoft (фокус на свернутом окне и прочее)
3) Реализовать внесение обнаруженных изменений в лог той же мониторилкой.