Hi,
also ich beschreibe einfach mal was mein Programm macht. Es überprüft jeden Prozess auf eventuelle Bedrohung. Als 1. Ist es eine Windowsdatei, wenn ja wird es automatisch zu erlaubten Prozessen hinzugefügt (die Datei heißt Pfad.txt und ist für XP ausgelegt, weil ich XP habe aber kann beliebig erweitert werden) wenn es keine Windowsdatei ist dann prüft es ob es eventuell ein Spiel ist (anhand der CPU-Auslastung des Prozesses wenn ein Spiel ist dann wird es automatisch erlaubt), wenn es kein Spiel ist dann analysiert es 4 Kriterien:
1. Fenstername (Bedrohung wenn kein Fenstername)
2. Autostart (Bedrohung wenn es sich automatisch bei Windowsstart öffnet)
3. Internetverbindung (Bedrohung wenn es eine Verbindung zum Internet herstellt)
4. Firewalleintrag (Bedrohung wenn es einen Firewalleintrag zum Prozess gibt)
Wenn es weniger als 2 Kriterien erfüllt dann wird es automatisch zu erlaubten Programmen hinzugefügt, aber wenn mehr 2 der oben angegeben Kriterien zutreffen dann wird über ein GUI dargestellt wo sich die Datei befindet inclusive der 4 Kriterien danach muss der Benutzer entscheiden ob es gut oder böse is, wenn böse kann es den Prozess stoppen und immer wenn es wiederkommt wird der Prozess beendet. Naja im groben und ganzen wars das eigentlich.
In dem Archiv sind noch n Paar Sachen wie Icons und 1 Wavedatei, könnt ihr in den Windowsordner kopieren, müsst ihr aber net
Bei Fragen, Anregungen oder Kritik einfach posten
Ich habe mein Programm liebevoll Prozess_Security genannt
Hier ist der Source aber ist auch nochmal im Archiv enthalten.
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\..\..\..\..\Programme\TuneUp Utilities 2009\Data\ico_alpha_cmDisplayStartmenuForm_il_8_32x32.ico
#AutoIt3Wrapper_Outfile=Prozess_Security.exe
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$P = ProcessList("Prozess_Security.exe")
If $P[0][0] > 1 Then Exit
;Opt("TrayMenuMode", 1) | Normalerweise aktiviert
FileDelete(@WindowsDir & "Firewall.txt")
FileDelete(@WindowsDir & "Firewall2.txt")
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <Sound.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
#include <Array.au3>
#include <Guiedit.au3>
$Warnung = _SoundOpen(@WindowsDir & "\Icon\Warnung.wav")
ProcessSetPriority("Prozess_Security.exe", 4)
TraySetToolTip("Prozess_Security")
$Len1 = StringLen(@HomeDrive & "\WINDOWS\")
$Len2 = StringLen(@HomeDrive & "\Dokumente und Einstellungen\")
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Programmstart")
$Ini = @WindowsDir & '\Prozesse.ini'
$Gruen = @WindowsDir & "\Icon\Grün.ico"
$Gelb = @WindowsDir & "\Icon\Gelb.ico"
$Rot = @WindowsDir & "\Icon\Rot.ico"
$Orange = @WindowsDir & "\Icon\Orange.ico"
Global $l, $Reg_Len, $Reg, $Inet_Len, $Inet, $Fire_Len, $Fire, $Fen_Len, $Fen, $File_Read
If Not FileExists($Ini) Then
IniWrite($Ini, "Immer", "explorer.exe", @WindowsDir & "\explorer.exe")
IniWrite($Ini, "Status", "AUTOEXEC", FileGetSize(@HomeDrive & "\AUTOEXEC.bat"))
EndIf
_Whileschleife()
Func _Whileschleife()
While 1
Global $Prozesse = ProcessList()
If $l = $Prozesse[0][0] Then
Sleep(40)
Else
$l = $Prozesse[0][0]
TraySetIcon($Gelb)
For $k = 2 To $l
$PID = $Prozesse[$k][1]
If $Prozesse[$k][0] = "Prozess_Security.exe" Or $Prozesse[$k][0] = "System" Or $Prozesse[$k][0] = "csrss.exe" Or $Prozesse[$k][0] = "svchost.exe" Then
Else
Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', 0x0410, 'int', 0, 'int', $PID)
If $aProc[0] = 0 Then $Prozess_Pfad = "Nicht ermittelbar!"
Local $vStruct = DllStructCreate('int[1024]')
DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameExW', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'wstr', '', 'int', 2048)
If $aReturn[0] = 0 Then $Prozess_Pfad = "Nicht ermittelbar!"
$Prozess_Pfad = $aReturn[3]
$Read_Ini = IniReadSection($Ini, "Block")
If Not @error Then
For $a = 1 To $Read_Ini[0][0]
If IniRead($Ini, "Block", $Read_Ini[$a][1], "") = $Prozess_Pfad Then
If ProcessExists($Read_Ini[$a][0]) Then
TraySetIcon($Rot)
ProcessClose($Read_Ini[$a][0])
Sleep(100)
If Not ProcessExists($Read_Ini[$a][0]) Then
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Read_Ini[$a][0] & " geblockt")
$l = 0
_Whileschleife()
Else
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Read_Ini[$a][0] & " konnte nicht geblockt werden")
$l = 0
_Whileschleife()
EndIf
Sleep(1000)
EndIf
EndIf
Next
EndIf
If IniRead($Ini, "Immer", $Prozesse[$k][0], "") <> $Prozess_Pfad Then
$P = ProcessList($Prozesse[$k][0])
If $P[0][0] = 1 Then
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozesse[$k][0] & " nicht bekannt")
_Unbekannt($Prozesse[$k][0], $Prozess_Pfad, $PID)
EndIf
EndIf
EndIf
Next
If IniRead($Ini, "Status", "AUTOEXEC", "") = FileGetSize(@HomeDrive & "\AUTOEXEC.bat") Then
Else
$File = FileOpen(@HomeDrive & "AUTOEXEC.bat", 0)
$Text = FileRead($File)
MsgBox(16, "Autoexec.bat wurde geändert!!!", "Aktueller Inhalt:" & @CRLF & @CRLF & $Text)
IniWrite($Ini, "Status", "AUTOEXEC", FileGetSize(@HomeDrive & "\AUTOEXEC.bat"))
EndIf
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $Prozesse[0][0] & " Prozesse erfolgreich kontrolliert")
TraySetIcon($Gruen)
EndIf
WEnd
EndFunc ;==>_Whileschleife
Func _Unbekannt($Prozessname, $Pfad, $PID)
$Gef = 0
TraySetIcon($Orange)
$Win = Windows($Pfad)
$Win_Len = StringLen($Win)
If $Win_Len <> 1 Or StringInStr($Pfad, "\SystemRoot\System32\smss.exe") Or StringInStr($Pfad, "\??\" & @HomeDrive & "\WINDOWS\system32\winlogon.exe") Or $Prozessname == "alg.exe" Then
$l = 0
IniWrite($Ini, "Immer", $Prozessname, $Pfad)
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Systemprozess " & $Prozessname & " automatisch erlaubt")
_Whileschleife()
EndIf
Sleep(100)
$Win = Windows($Pfad)
$Win_Len = StringLen($Win)
If $Win_Len <> 1 Or StringInStr($Pfad, "\SystemRoot\System32\smss.exe") Or StringInStr($Pfad, "\??\" & @HomeDrive & "\WINDOWS\system32\winlogon.exe") Or $Prozessname == "alg.exe" Then
$l = 0
IniWrite($Ini, "Immer", $Prozessname, $Pfad)
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Systemprozess " & $Prozessname & " automatisch erlaubt")
_Whileschleife()
EndIf
ProcessSetPriority("Prozess_Security.exe", 2)
Sleep(1000)
$Usage = _ProcessListCPU("", 0)
$P = _ArraySearch($Usage, StringLeft($Prozessname, StringLen($Prozessname) - 4))
If $P <> -1 Then
Sleep(1000)
If $Usage[$P][2] > 20 Then
Sleep(1000)
$Usage = _ProcessListCPU("", 0)
$P = _ArraySearch($Usage, StringLeft($Prozessname, StringLen($Prozessname) - 4))
If $P <> -1 Then
If $Usage[$P][2] > 50 Then
$l = 0
IniWrite($Ini, "Immer", $Prozessname, $Pfad)
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozessname & " automatisch als Spiel erkannt")
_Whileschleife()
EndIf
EndIf
EndIf
EndIf
ProcessSetPriority("Prozess_Security.exe", 4)
$Reg = Reg($Prozessname)
$Fen = _PID2WinTitle($PID)
$Fire = Firewall($Prozessname)
$Inet = Inet($Prozessname)
$Fen_Len = StringLen($Fen)
$Reg_Len = StringLen($Reg)
If $Fen_Len = 1 Then $Fen = _PID2WinTitle($PID)
If $Reg_Len = 1 Then $Reg = Reg($Prozessname)
$Fen_Len = StringLen($Fen)
$Reg_Len = StringLen($Reg)
$Inet_Len = StringLen($Inet)
$Fire_Len = StringLen($Fire)
If $Fen_Len = 1 Then $Gef += 1
If $Reg_Len <> 1 Then $Gef += 1
If $Inet_Len <> 1 Then $Gef += 1
If $Fire_Len <> 1 Then $Gef += 1
If $Gef >= 2 Then
Gefahr($Prozessname, $Pfad, $PID)
Else
IniWrite($Ini, "Immer", $Prozessname, $Pfad)
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozessname & " besteht keine Gefahr")
EndIf
EndFunc ;==>_Unbekannt
Func Gefahr($Prozessname, $Pfad, $PID)
_SoundPlay($Warnung)
$Form = GUICreate($Prozessname & " (PID:" & $PID & ")", 754, 314, -1, -1)
$Label1 = GUICtrlCreateLabel("", 8, 8, 4, 4)
$Pfad_Auswertung = GUICtrlCreateLabel("", 584, 48, 52, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Internet = GUICtrlCreateLabel("", 224, 128, 34, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label3 = GUICtrlCreateLabel("baut Verbindung zum Internet auf:", 8, 128, 199, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label4 = GUICtrlCreateLabel("Prozesspfad:", 8, 48, 80, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label2 = GUICtrlCreateLabel("Autostarteintrag:", 8, 168, 100, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Autostart = GUICtrlCreateLabel("", 128, 168, 200, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label5 = GUICtrlCreateLabel("Analyse", 8, 8, 59, 22)
GUICtrlSetFont(-1, 12, 400, 0, "arial")
$Label6 = GUICtrlCreateLabel("Bewertung auf mögliche Infektion", 496, 8, 231, 22)
GUICtrlSetFont(-1, 12, 400, 0, "arial")
$Internet_Auswertung = GUICtrlCreateLabel("Internet", 584, 128, 47, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Autostart_Auswertung = GUICtrlCreateLabel("Autostart", 584, 168, 57, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label8 = GUICtrlCreateLabel("Fenstername:", 8, 88, 84, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label9 = GUICtrlCreateLabel("Firewalleintrag:", 8, 208, 91, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Firewall = GUICtrlCreateLabel("", 120, 208, 34, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Firewall_Auswertung = GUICtrlCreateLabel("Firewall", 584, 208, 48, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Fenster_Auswertung = GUICtrlCreateLabel("Fenster", 584, 88, 48, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label10 = GUICtrlCreateLabel("______________", 552, 248, 116, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Label11 = GUICtrlCreateLabel("Gesamtbewertung:", 448, 280, 113, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Gesamtbewertung = GUICtrlCreateLabel("", 584, 280, 50, 20)
GUICtrlSetFont(-1, 10, 400, 0, "arial")
$Button1 = GUICtrlCreateButton("Erlauben", 8, 278, 115, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Prozess beenden", 136, 278, 115, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Immer blocken", 264, 278, 115, 25, $WS_GROUP)
$Edit1 = GUICtrlCreateEdit($Pfad, 96, 40, 377, 33, $ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, "arial")
$Edit2 = GUICtrlCreateEdit("", 96, 80, 377, 33, $ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, "arial")
GUISetState(@SW_SHOW)
WinActivate($Form)
WinSetOnTop($Form, "", 1)
If StringInStr(@HomeDrive & "\WINDOWS\", StringLeft($Pfad, $Len1)) Or StringInStr(@HomeDrive & "\Dokumente und Einstellungen\", StringLeft($Pfad, $Len2)) Then
If StringLeft($Pfad, $Len2) <> $Pfad Or StringLeft($Pfad, $Len1) <> $Pfad Then
GUICtrlSetData($Pfad_Auswertung, "10")
Else
GUICtrlSetData($Pfad_Auswertung, "0")
EndIf
Else
GUICtrlSetData($Pfad_Auswertung, "0")
EndIf
If $Reg_Len <> 1 Then
GUICtrlSetData($Autostart, StringLeft($Reg, StringLen($Reg) - 3))
GUICtrlSetData($Autostart_Auswertung, StringRight($Reg, 2))
Else
GUICtrlSetData($Autostart, "NEIN")
GUICtrlSetData($Autostart_Auswertung, "0")
EndIf
If $Inet_Len <> 1 Then
GUICtrlSetData($Internet, StringLeft($Inet, StringLen($Inet) - 3))
GUICtrlSetData($Internet_Auswertung, StringRight($Inet, 2))
Else
GUICtrlSetData($Internet, "NEIN")
GUICtrlSetData($Internet_Auswertung, "0")
EndIf
If $Fire_Len <> 1 Then
GUICtrlSetData($Firewall, StringLeft($Fire, StringLen($Fire) - 3))
GUICtrlSetData($Firewall_Auswertung, StringRight($Fire, 2))
Else
GUICtrlSetData($Firewall, "NEIN")
GUICtrlSetData($Firewall_Auswertung, "0")
EndIf
If $Fen_Len <> 1 Then
GUICtrlSetData($Edit2, $Fen)
GUICtrlSetData($Fenster_Auswertung, "0")
Else
GUICtrlSetData($Edit2, "")
GUICtrlSetData($Fenster_Auswertung, "30")
EndIf
GUICtrlSetData($Gesamtbewertung, GUICtrlRead($Pfad_Auswertung) + GUICtrlRead($Autostart_Auswertung) + GUICtrlRead($Internet_Auswertung) + GUICtrlRead($Firewall_Auswertung) + GUICtrlRead($Fenster_Auswertung))
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(40)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
GUIDelete($Form)
IniWrite($Ini, "Immer", $Prozessname, $Pfad)
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $Prozessname & " erlaubt")
$l = 0
_Whileschleife()
Case $Button2
GUIDelete($Form)
ProcessClose($Prozessname)
Sleep(100)
$l = 0
_Whileschleife()
Case $Button3
GUIDelete($Form)
IniWrite($Ini, "Block", $Prozessname, $Pfad)
ProcessClose($Prozessname)
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $Prozessname & " zu Blocken hinzugefügt")
$l = 0
_Whileschleife()
EndSwitch
WEnd
EndFunc ;==>Gefahr
Func Reg($Prozessname)
For $k = 1 To 1000
$var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $k)
If @error <> 0 Then ExitLoop
$var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $var)
If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKLM/Run) 25"
Next
For $k = 1 To 1000
$var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $k)
If @error <> 0 Then ExitLoop
$var2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $var)
If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKCU/Run) 20"
Next
For $k = 1 To 1000
$var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $k)
If @error <> 0 Then ExitLoop
$var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $var)
If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKLM/RunServices) 25"
Next
For $k = 1 To 1000
$var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $k)
If @error <> 0 Then ExitLoop
$var2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", $var)
If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKCU/RunServices) 20"
Next
For $k = 1 To 1000
$var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $k)
If @error <> 0 Then ExitLoop
$var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $var)
If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKLM/RunOnce) 25"
Next
For $k = 1 To 1000
$var = RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $k)
If @error <> 0 Then ExitLoop
$var2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", $var)
If StringInStr($var, $Prozessname) Or StringInStr($var2, $Prozessname) Then Return "JA (HKCU/RunOnce) 20"
Next
EndFunc ;==>Reg
Func Inet($Prozess)
FileDelete(@WindowsDir & "\Firewall.txt")
_RunDOS("netstat -b >" & @WindowsDir & "\Firewall.txt")
_FileReadToArray(@WindowsDir & "\Firewall.txt", $File_Read)
$Array = _ArraySearch($File_Read, "[" & $Prozess & "]", 0, 0, 1, 1, 0)
If $Array <> -1 Then Return "JA 30"
FileDelete(@WindowsDir & "\Firewall.txt")
EndFunc ;==>Inet
Func _PID2WinTitle($PID)
$Liste = WinList()
For $i = 1 To $Liste[0][0]
If $PID = WinGetProcess($Liste[$i][0]) Then Return $Liste[$i][0]
Next
EndFunc ;==>_PID2WinTitle
Func Firewall($Prozess)
FileDelete(@WindowsDir & "\Firewall2.txt")
_RunDOS("netsh firewall show config >" & @WindowsDir & "\Firewall2.txt")
_FileReadToArray(@WindowsDir & "\Firewall2.txt", $File_Read)
$Array = _ArraySearch($File_Read, $Prozess, 0, 0, 1, 1, 0)
If $Array <> -1 Then Return "JA 35"
FileDelete(@WindowsDir & "\Firewall2.txt")
EndFunc ;==>Firewall
Func Windows($Pfad_Windows)
$Pfad_Right = StringRight($Pfad_Windows, StringLen($Pfad_Windows) - 3)
_FileReadToArray(@WindowsDir & "\Pfad.txt", $File_Read)
$Array = _ArraySearch($File_Read, $Pfad_Right)
If $Array <> -1 Then Return "JAJAJA"
EndFunc ;==>Windows
Func _Log($Text)
If FileExists(@HomeDrive & "\Prozess_Security_Log.txt") Then
$File_Open = FileOpen(@HomeDrive & "\Prozess_Security_Log.txt", 9)
FileWrite(@HomeDrive & "\Prozess_Security_Log.txt", @CRLF & $Text)
FileClose($File_Open)
Else
$File_Open = FileOpen(@HomeDrive & "\Prozess_Security_Log.txt", 9)
FileWrite(@HomeDrive & "\Prozess_Security_Log.txt", $Text)
FileClose($File_Open)
EndIf
EndFunc ;==>_Log
Func _ProcessStop($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ai_Handle[0])
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
EndIf
Else
SetError(2)
Return 0
EndIf
EndFunc ;==>_ProcessStop
Func _ProcessListCPU($strProcess = "", $iSampleTime = 500, $sComputerName = @ComputerName)
Dim $aResultSet[1][3]
If $strProcess = 0 And IsNumber($strProcess) Then $strProcess = "Idle"
If $iSampleTime = "" And IsString($iSampleTime) Then $iSampleTime = 500
If $sComputerName = "" Then $sComputerName = @ComputerName
If Not IsDeclared("aProcess") And $iSampleTime = 0 Then
$bFirstTimeInLoopMode = 1
Else
$bFirstTimeInLoopMode = 0
EndIf
If Not IsDeclared("aProcess") Then
[/autoit] [autoit][/autoit] [autoit]Global $aProcess[10000][10]
[/autoit] [autoit][/autoit] [autoit]Global $objWMIService
[/autoit] [autoit][/autoit] [autoit]$objWMIService = ObjGet("winmgmts:\\" & $sComputerName & "\root\CIMV2")
If @error Then
$aResultSet[0][0] = -2
Return $aResultSet
EndIf
EndIf
If $iSampleTime Or $bFirstTimeInLoopMode = 1 Then
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_PerfProc_Process")
For $objItem In $colItems
[/autoit] [autoit][/autoit] [autoit]$iPID = $objItem.IDProcess
If $iPID = 0 And $objItem.Name = "_Total" Then $iPID = 9999
$aProcess[$iPID][4] = $objItem.PercentProcessorTime
$aProcess[$iPID][5] = $objItem.TimeStamp_Sys100NS
Next
If $objItem = "" Then
$aResultSet[0][0] = -1
Return $aResultSet
EndIf
Sleep($iSampleTime)
EndIf
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_PerfProc_Process")
[/autoit] [autoit][/autoit] [autoit]$iCountItems = 0
$iTotalUsedByName = 0
$iTotalUsed = 0
For $objItem In $colItems
[/autoit] [autoit][/autoit] [autoit]If $objItem.Name = "_Total" And Not ($strProcess = "_Total") Then ExitLoop
[/autoit] [autoit][/autoit] [autoit]$iPID = $objItem.IDProcess
If $iPID = 0 And $objItem.Name = "_Total" Then $iPID = 9999
$aProcess[$iPID][6] = $objItem.PercentProcessorTime
$aProcess[$iPID][7] = $objItem.TimeStamp_Sys100NS
$aProcess[$iPID][8] = $aProcess[$iPID][6] - $aProcess[$iPID][4]
$aProcess[$iPID][9] = $aProcess[$iPID][7] - $aProcess[$iPID][5]
$aProcess[$iPID][3] = Round(($aProcess[$iPID][8] / $aProcess[$iPID][9]) * 100, 0)
$aProcess[$iPID][4] = $aProcess[$iPID][6]
$aProcess[$iPID][5] = $aProcess[$iPID][7]
If Not ($objItem.Name = "Idle") And Not ($objItem.Name = "_Total") Then
$iTotalUsed = $iTotalUsed + $aProcess[$iPID][3]
EndIf
If (($strProcess = "") And IsString($strProcess)) Or _
(StringUpper($strProcess) = StringUpper($objItem.Name)) Or _
(IsNumber($strProcess) And ($strProcess = $objItem.IDProcess)) Then
$iCountItems += 1
ReDim $aResultSet[$iCountItems + 1][3]
$aResultSet[$iCountItems][0] = $objItem.Name
$aResultSet[$iCountItems][1] = $iPID
$aResultSet[$iCountItems][2] = $aProcess[$iPID][3]
$aResultSet[0][0] = $iCountItems
If Not ($objItem.Name = "Idle") Or ($strProcess = "Idle") Then
$iTotalUsedByName = $iTotalUsedByName + $aProcess[$iPID][3]
EndIf
EndIf
Next
If $objItem = "" Then
$aResultSet[0][0] = -1
Return $aResultSet
EndIf
$aResultSet[0][1] = $iTotalUsed
$aResultSet[0][2] = $iTotalUsedByName
Return $aResultSet
EndFunc ;==>_ProcessListCPU
Edit: folgende Änderung:
Spoiler anzeigen
If IniRead($Ini, "Immer", $Prozesse[$k][0], "") <> $Prozess_Pfad Then
$P = ProcessList($Prozesse[$k][0])
If $P[0][0] = 1 Then
_Log(@MDAY & "." & @MON & "." & @YEAR & " [" & @HOUR & ":" & @MIN & ":" & @SEC & "] Prozess " & $Prozesse[$k][0] & " nicht bekannt")
_Unbekannt($Prozesse[$k][0], $Prozess_Pfad, $PID)
EndIf
EndIf