God_Zilla, у меня давно и успешно работает вот такой скрипт:
Код "cleanup.bat"
Код:

@Echo Off
:: Завершает не указанные в "белом списке" процессы
:: Anonymous, 2011
SetLocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
Call :CheckOS
If %ErrorLevel%==1 Exit /B
:: Файл со списком разрешённых процессов
Set #WhitelistFile=%~sdp0whitelist.txt
:: Получение PID своего процесса
:GetPID
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
)
:: Чтение файла со списком разрешённых процессов
:ReadList
Set /A i=0
For /F "tokens=*" %%l in (%#WhitelistFile%) Do (
Set /A i+=1
Set _Whitelist!i!=%%l
)
Set Whitelist_strings=!i!
:: Получение списка процессов
:GetProcList
Set ProcList_Strings=0
For /F "tokens=1,2* skip=5 delims=," %%P In ('tasklist /FO CSV') Do (
Call :Add Proclist %%~P
)
Call :Purge whitelist
Call :Purge proclist
Call :Compare
EndLocal
Exit /B
:: Вывод содержимого списка
:: (не используется, для отладки)
:Dump
Set $ListName=%*
Set /A #StrCount=!%$ListName%_strings!
Echo.
Echo ==[%$ListName%]=======:
For /L %%S In (1,1,%#StrCount%) Do (
Echo [%%S] !_%$ListName%%%S!
)
Echo.
Exit /B 0
:: Сравнение списков, завершение не разрешенных процессов
:Compare
For /L %%S In (1,1,%Proclist_strings%) Do (
Set $TmpStringData=!_Proclist%%S!
Set isUnknown=True
For /L %%S In (1,1,%Whitelist_strings%) Do (
Set $WhitelistString=!_Whitelist%%S!
If /I !$TmpStringData!==!$WhitelistString! Set isUnknown=False
)
If !isUnknown!==True (
If "!$TmpStringData!"=="cmd.exe" (
taskkill /F /FI "PID ne %MyPID%" /FI "IMAGENAME eq cmd.exe"
) Else (
taskkill /F /IM "!$TmpStringData!"
)
)
)
Exit /B 0
:: Добавка строки
:Add
Set $ListName=
Set $ListString=
For /F "tokens=1,* delims= " %%n In ("%*") Do (
Set $ListName=%%n
Set $ListString=%%~o
)
Set /A $StrCount=!%$ListName%_strings!
Set /A $StrCount+=1
Set _%$ListName%%$StrCount%=%$ListString%
Set %$ListName%_strings=%$StrCount%
Exit /B 0
:: Очистка от одинаковых строк
:Purge
Set $ListName=%*
Set /A #StrCount=!%$ListName%_strings!
:PurgeLoop
Set /A $TmpStringNum=0
For /L %%S In (1,1,%#StrCount%) Do (
Set $TmpStringNum=%%S
Set $TmpStringData=!_%$ListName%%%S!
For /L %%D In (1,1,%#StrCount%) Do (
If Not %%D==!$TmpStringNum! (
If "!_%$ListName%%%D!"=="!$TmpStringData!" Call :Delete %$ListName% %%D&&GoTo PurgeLoop
)
)
)
Exit /B 0
:: Удаление строки, сдвиг номеров следующих за ней
:Delete
Set $ListName=
Set $ListStringNum=
For /F "tokens=1,* delims= " %%n In ("%*") Do (
Set $ListName=%%n
Set $ListStringNum=%%o
)
Set /A #StrCount=!%$ListName%_strings!
Set /A i=0
For /L %%S In (1,1,%#StrCount%) Do (
If Not %%S==%$ListStringNum% Set /A i+=1
If Not %%S==%$ListStringNum% Set _%$ListName%!i!=!_%$ListName%%%S!
)
Set _%$ListName%%#StrCount%=
Set %$ListName%_strings=%i%
Exit /B 0
:: Проверка на версию ОС (На Win7 и Vista скрипт не проверялся,
:: поэтому и запускаться он там не будет)
:CheckOS
For /F "tokens=1,2* delims=[" %%A In ('ver') Do (
Set $TmpString=%%B
For /F "tokens=1,2* delims= " %%A In ("!$TmpString!") Do (
Set $TmpString=%%B
For /F "tokens=1,2* delims=]" %%A In ("!$TmpString!") Do (
Set $TmpString=%%A
For /F "tokens=1,2,3 delims=." %%A In ("!$TmpString!") Do (
Set VerMajor=%%A
Set VerMinor=%%B
Set VerBuild=%%C
)
)
)
)
Set bCompatibleOS=false
Echo 5.0 5.1|findstr /R "\<!VerMajor!.!VerMinor!\>">nul&&Set bCompatibleOS=true
If %bCompatibleOS%==false (
ChCp 866>nul
Echo.
Echo Ваша операционная система не поддерживается
Echo Для выхода нажмите любую кнопку...
Echo.
Pause>nul
Exit /B 1
)
Exit /B 0
А вот список "разрешенных процессов" для него:
Код "whitelist.txt"
Код:

explorer.exe
console.exe
csrss.exe
ctfmon.exe
firefox.exe
lsass.exe
psi-plus.exe
services.exe
smss.exe
svchost.exe
tasklist.exe
taskmgr.exe
VistaDrv.exe
winlogon.exe
wmiprvse.exe
Всё, что вам нужно сделать - это генерировать whitelist.txt при старте, и периодически запускать основной скрипт, который будет сравнивать процессы и подчищать недавно запущенные. Ну и еще, там защита от запуска на vista/win7 стоит, потому что у меня их нету, следовательно, работу скрипта я не проверял на них. Чтобы всё-таки запустить, внесите номер версии в строку
Код:

Echo 5.0 5.1|findstr /R "\<!VerMajor!.!VerMinor!\>">nul&&Set bCompatibleOS=true
Или (так будет даже проще) закомментируйте\удалите эти две строки в начале:
Код:

Call :CheckOS
If %ErrorLevel%==1 Exit /B