Войти

Показать полную графическую версию : Создание базы по определению Антивирусов и Файрволлов через скрипт


Страниц : [1] 2

saavaage
06-10-2010, 14:53
Просьба проверить Ваши системы данной утилитой и отписаться:
1. Ваши антивирус и файрвол (название, версия)
2. определились или нет данным модулем
3. системные данные

Заранее спасибо всем за тестинг!

Код

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>


Global $DebugMode = 0
Opt("GUIOnEventMode", 1)




$hMain_GUI = GUICreate("Проверка безопасности OS", 619, 182, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 120)
$Security = GUICtrlCreateTabItem("Проверка на средства защиты OS")

GUICtrlCreateLabel('Ваша OS', 24, 52)
$OS = GUICtrlCreateInput('', 84, 50, 290, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('SP', 384, 52)
$SP = GUICtrlCreateInput('', 405, 50, 100, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('Bit', 515, 52)
$Bit = GUICtrlCreateInput(@OSArch , 535, 50, 50, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))


GUICtrlCreateLabel('Антивирус', 24, 75)
$Antivirus = GUICtrlCreateInput('', 84, 75, 500, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('Файрволл', 24, 100)
$Firewall = GUICtrlCreateInput('', 84, 100, 500, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))

If _ServiceExists('wscsvc') = 1 Then
_Antivir()
_Firewall()
Else
MsgBox(0, 'Уведомление', 'Для работы модуля необходимо активировать' &@CRLF &' в системе Центр Обеспечения Безопасности!')
EndIf
_OSInfo()

$Button_Save = GUICtrlCreateButton('Сохранить на РС', 501, 145, 100, 30)
GUICtrlSetOnEvent($Button_Save, "_Save")

GUICtrlCreateTabItem("")
GUISetState()

While 1
Sleep(100)
WEnd

Func CLOSEClicked()
Exit
EndFunc

Func _Save()
GUICtrlSetState($Button_Save, $GUI_DISABLE)
If FileExists(@DesktopDir&'\securety_report.txt') Then
MsgBox(4096, "securety report", 'securety_report.txt уже существует. Переменуйте' &@CRLF & 'его для предотвращения затирания информации!')
Else
$sData = GUICtrlRead($OS) & ' ' & GUICtrlRead($SP) & ' ' & GUICtrlRead($Bit) & ' ' &@CRLF& 'Антивирус: ' & GUICtrlRead($Antivirus) &@CRLF& 'Файрволл: ' & GUICtrlRead($Firewall)
$file = FileOpen(@DesktopDir&'\securety_report.txt',18)
FileWrite($file, $sData)
FileClose($file)
sleep(1000)
GUICtrlSetState($Button_Save, $GUI_ENABLE)
EndIf





EndFunc

Func _OSInfo()
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$OutputTitle = ""
$OutputOS = ""
$OutputSP = ""

$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) Then
Local $Object_Flag = 0
For $objItem In $colItems
$Object_Flag = 1
$OutputOS &= $objItem.Caption
$OutputSP &= $objItem.CSDVersion
Next
If $Object_Flag = 0 Then
GUICtrlSetData($OS, "Система не определена!")
GUICtrlSetData($SP, "SP не определен!")
Else
GUICtrlSetData($OS, $OutputOS)
GUICtrlSetData($SP, $OutputSP)
$OutputOS = ""
$OutputSP = ""
EndIf
EndIf
EndFunc

Func _Antivir()
$OutputAnt = ""

$objWMIService = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
$colItems = $objWMIService.ExecQuery("SELECT * FROM AntiVirusProduct", "WQL", 48)

If IsObj($colItems) Then
For $objItem In $colItems
$OutputAnt &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next
If $OutputAnt <> '' Then
GUICtrlSetData($Antivirus, StringTrimRight($OutputAnt, 2))
$OutputAnt = ""
Else
GUICtrlSetData($Antivirus, 'Антивирус отсутствует!')
EndIf
Endif
EndFunc

Func _Firewall()
$OutputFw = ""

$objWMIService = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
$colItems = $objWMIService.ExecQuery("SELECT * FROM FireWallProduct", "WQL", 48)

If IsObj($colItems) Then
For $objItem In $colItems
$OutputFw &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next
If $OutputFw <> '' Then
GUICtrlSetData($Firewall, StringTrimRight($OutputFw, 2))
$OutputFw = ""
Else
GUICtrlSetData($Firewall, 'Файрволл отсутствует!')
EndIf
Endif
EndFunc

Func _ServiceExists($nService)
Local $objWMIService ; Main object
Local $objQueryCollection ; Result of query
Local $hObj ; Current selected Object in $objQueryCollection

If $DebugMode = 1 Then ConsoleWrite(@CR)
If $DebugMode = 1 Then ConsoleWrite("_ServiceExists($nService)" & @CR)
If $DebugMode = 1 Then ConsoleWrite("_ServiceExists($nService)= " & $nService & @CR)

$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")

If IsObj($objWMIService) Then
If $DebugMode = 1 Then ConsoleWrite("$objWMIService is an Object" & @CR)
$objQueryCollection = $objWMIService.ExecQuery("SELECT * FROM Win32_Service Where Name = '" & $nService & "'")
Else
Return 110
EndIf

If IsObj($objQueryCollection) then
If $DebugMode = 1 Then ConsoleWrite("Collection returned by Query on $objWMIService)" & @CR)

For $hObj In $objQueryCollection
If $hObj.Name = $nService Then Return 1 ;Service found, return 0
Next ;<== $objWMIService In $hObj
Else
Return 110 ;Obj error
EndIf

Return 0 ;Service not found, return -1

EndFunc


ссылка на готовый модуль http://ifolder.ru/19637962

PS в основу модуля легло предложение madmasles ( http://forum.oszone.net/post-1512083-11.html ) за что ему отдельное спасибо.


Итак, на 09102010 промежуточные итоги:

http://s49.radikal.ru/i124/1010/ca/017bb1004a40.jpg (http://www.radikal.ru)

madmasles
06-10-2010, 15:09
saavaage,
Было бы странно, если бы у меня не определилось. :)
1. ESET Smart Security 3.0 Version: 3.0
Персональный файервол ESET Version: 3.0.684.0
2. См. п.1

saavaage
06-10-2010, 15:18
madmasles,
у вас стоит один ESET Smart Security, который содержит и файрволл и ативирус? и они корректно определились в своих полях?

madmasles
06-10-2010, 15:22
saavaage,
Стоит один.

Iska
06-10-2010, 15:24
saavaage, предложения:
* хорошо бы ещё наименование и версию ОС с точностью до SP; в определитель не пойдёт, а, так — на всякий случай;
* вместо формы можно было пользовать простой MsgBox — чтобы можно было просто скопировать по Ctrl-C; либо добавьте кнопку+функцию для копирования в буфер обмена из полей;
* пробелы в:
$OutputAnt &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
в обоих случаях — совершенно лишние.
Norton Internet Security Version: 15.5.0.23
Norton Internet Security Version: 15.5.0.23

saavaage
06-10-2010, 15:27
Iska,
1 - гут
2. добавил пробелы на тот случай, если не одно антивирусное / файрвольное решение в системе (у некоторых есть и такое) .Ч ерт не обратил внимание, что это уже есть. Корректирую скрипт. Сейчас перевыложу.

Iska
06-10-2010, 15:38
2. добавил пробелы на тот случай, если не одно антивирусное / файрвольное решение в системе (у некоторых есть и такое) . »
Спасибо, ясно. Но, всё равно — вынести:
GUICtrlSetData($Antivirus, $OutputAnt)
$OutputAnt = ""
за пределы цикла (а то всё одно будет значение только по последнему проходу) и там же, перед «GUICtrlSetData($Antivirus, $OutputAnt)» (или прямо в присваивании) отрезать с конца «$OutputAnt» два пробела.

saavaage
06-10-2010, 15:41
Iska, не будет, там же $OutputAnt &= везде...

Iska
06-10-2010, 15:59
Будет. Проверьте на таком коде:
AutoItSetOption("MustDeclareVars", 1)

Local $oSWbemServicesEx = ObjGet("winmgmts:\\.\root\cimv2")
Local $cSWbemObjectSet = $oSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process", "WQL", 0)
Local $oSWbemObjectEx
Local $sOutputText = ""

If IsObj($cSWbemObjectSet) Then
For $oSWbemObjectEx In $cSWbemObjectSet
$sOutputText &= $oSWbemObjectEx.Name & " "

ConsoleWrite($oSWbemObjectEx.Name & ": [" & $sOutputText & "]" & @CRLF)

$sOutputText = ""
Next
EndIf

$oSWbemObjectEx = 0
$cSWbemObjectSet = 0
$oSWbemServicesEx = 0

Exit(0)

Правильно — так, как я описал постом выше, т.е., наподобие:

If IsObj($colItems) Then
For $objItem In $colItems
$OutputAnt &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next

GUICtrlSetData($Antivirus, StringTrimRight($OutputAnt, 2))
$OutputAnt = ""
Else

madmasles
06-10-2010, 16:03
хорошо бы ещё наименование и версию ОС с точностью до SP »
Тоже через WMI; Generated by AutoIt ScriptOMatic

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$OutputTitle = ""
$Output = ""
$OutputTitle &= "Computer: " & $strComputer & @CRLF
$OutputTitle &= "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) Then
Local $Object_Flag = 0
For $objItem In $colItems
$Object_Flag = 1
$Output &= "Caption: " & $objItem.Caption & @CRLF
$Output &= "CSDVersion: " & $objItem.CSDVersion & @CRLF
$Output &= "CSName: " & $objItem.CSName & @CRLF
$Output &= "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output &= "Organization: " & $objItem.Organization & @CRLF
$Output &= "OSLanguage: " & $objItem.OSLanguage & @CRLF
$Output &= "RegisteredUser: " & $objItem.RegisteredUser & @CRLF
$Output &= "SerialNumber: " & $objItem.SerialNumber & @CRLF
$Output &= "Version: " & $objItem.Version & @CRLF
If MsgBox(1, "WMI Output", $Output) = 2 Then ExitLoop
$Output = ""
Next
If $Object_Flag = 0 Then MsgBox(1, "WMI Output", $OutputTitle)
Else
MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_OperatingSystem")
EndIf


Func WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndFunc ;==>WMIDateStringToDate

saavaage
06-10-2010, 16:09
madmasles, также прекрасно решают проблему системные макросы...

Iska, разве скрипт через операнд &= не будет постоянно наращивать строку до конца цикла (т.е. все найденные будут добавляться)? Ой, все понял... Ваша правда, конечно

Iska
06-10-2010, 16:24
Iska, разве скрипт через операнд &= не будет постоянно наращивать строку…»
Да, будет наращивать, но Вы же там же, внутри цикла, следом затираете — «$OutputAnt = ""».

saavaage
06-10-2010, 16:29
окончательный код скрипта:

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>


Global $DebugMode = 0
Opt("GUIOnEventMode", 1)




$hMain_GUI = GUICreate("Проверка безопасности OS", 619, 182, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 120)
$Security = GUICtrlCreateTabItem("Проверка на средства защиты OS")

GUICtrlCreateLabel('Ваша OS', 24, 52)
$OS = GUICtrlCreateInput(@OSVersion, 84, 50, 290, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('SP', 384, 52)
$SP = GUICtrlCreateInput(@OSServicePack, 405, 50, 100, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('Bit', 515, 52)
$Bit = GUICtrlCreateInput(@OSArch , 535, 50, 50, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))


GUICtrlCreateLabel('Антивирус', 24, 75)
$Antivirus = GUICtrlCreateInput('', 84, 75, 500, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('Файрволл', 24, 100)
$Firewall = GUICtrlCreateInput('', 84, 100, 500, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))

If _ServiceExists('wscsvc') = 1 Then
_Antivir()
_Firewall()
Else
MsgBox(0, 'Уведомление', 'Для работы модуля необходимо активировать' &@CRLF &' в системе Центр Обеспечения Безопасности!')

EndIf

$Button_Save = GUICtrlCreateButton('Сохранить на РС', 501, 145, 100, 30)
GUICtrlSetOnEvent($Button_Save, "_Save")

GUICtrlCreateTabItem("")
GUISetState()

While 1
Sleep(100)
WEnd

Func CLOSEClicked()
Exit
EndFunc

Func _Save()
GUICtrlSetState($Button_Save, $GUI_DISABLE)
If FileExists(@DesktopDir&'\securety_report.txt') Then
MsgBox(4096, "securety report", 'securety_report.txt уже существует. Переменуйте' &@CRLF & 'его для предотвращения затирания информации!')
Else
$sData = GUICtrlRead($OS) & ' ' & GUICtrlRead($SP) & ' ' & GUICtrlRead($Bit) & ' ' &@CRLF& 'Антивирус: ' & GUICtrlRead($Antivirus) &@CRLF& 'Файрволл: ' & GUICtrlRead($Firewall)
$file = FileOpen(@DesktopDir&'\securety_report.txt',18)
FileWrite($file, $sData)
FileClose($file)
sleep(1000)
GUICtrlSetState($Button_Save, $GUI_ENABLE)
EndIf


EndFunc



Func _Antivir()
$OutputAnt = ""

$objWMIService = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
$colItems = $objWMIService.ExecQuery("SELECT * FROM AntiVirusProduct", "WQL", 48)

If IsObj($colItems) Then
For $objItem In $colItems
$OutputAnt &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next
If $OutputAnt <> '' Then
GUICtrlSetData($Antivirus, StringTrimRight($OutputAnt, 2))
$OutputAnt = ""
Else
GUICtrlSetData($Antivirus, 'Антивирус отсутствует!')
EndIf
Endif
EndFunc

Func _Firewall()
$OutputFw = ""

$objWMIService = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
$colItems = $objWMIService.ExecQuery("SELECT * FROM FireWallProduct", "WQL", 48)

If IsObj($colItems) Then
For $objItem In $colItems
$OutputFw &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next
MsgBox(0, '', $OutputFw)
If $OutputFw <> '' Then
GUICtrlSetData($Firewall, StringTrimRight($OutputFw, 2))
$OutputFw = ""
Else
GUICtrlSetData($Firewall, 'Антивирус отсутствует!')
EndIf
Endif
EndFunc

Func _ServiceExists($nService)
Local $objWMIService ; Main object
Local $objQueryCollection ; Result of query
Local $hObj ; Current selected Object in $objQueryCollection

If $DebugMode = 1 Then ConsoleWrite(@CR)
If $DebugMode = 1 Then ConsoleWrite("_ServiceExists($nService)" & @CR)
If $DebugMode = 1 Then ConsoleWrite("_ServiceExists($nService)= " & $nService & @CR)

$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")

If IsObj($objWMIService) Then
If $DebugMode = 1 Then ConsoleWrite("$objWMIService is an Object" & @CR)
$objQueryCollection = $objWMIService.ExecQuery("SELECT * FROM Win32_Service Where Name = '" & $nService & "'")
Else
Return 110
EndIf

If IsObj($objQueryCollection) then
If $DebugMode = 1 Then ConsoleWrite("Collection returned by Query on $objWMIService)" & @CR)

For $hObj In $objQueryCollection
If $hObj.Name = $nService Then Return 1 ;Service found, return 0
Next ;<== $objWMIService In $hObj
Else
Return 110 ;Obj error
EndIf

Return 0 ;Service not found, return -1

EndFunc

Просьба проверить на правильность и тогда выложу на тест на форуме

madmasles
06-10-2010, 16:30
также прекрасно решают проблему системные макросы.. »
Не все: посмотрите начиная с этого поста. (http://forum.ru-board.com/topic.cgi?forum=5&topic=33902&start=320#19)
$objItem.Caption - различает Home и Professional.
$objItem.InstallDate - даты установки в макросах тоже не нашел.


В функции _Firewall() - MsgBox(0, '', $OutputFw) лишний. И в ней же GUICtrlSetData($Firewall, 'Антивирус отсутствует!') лучше, наверное, "Файервол отсутствует!"

saavaage
06-10-2010, 16:42
madmasles, а если система не 32 bit как тогда?

madmasles, да, спешу, е-мое... Забыл подчистить

Iska
06-10-2010, 16:45
madmasles, также прекрасно решают проблему системные макросы... »
Я тоже за WMI. Не в таком объёме, конечно. На мой взгляд достаточно:
Caption, CSDVersion, Version

saavaage
06-10-2010, 16:46
madmasles, будут ли они в принципе работать на 32 bit. У меня ведь и определение есть ли служба завязано на этом... Только сейчас обратил внимание....

madmasles
06-10-2010, 16:54
Iska, Я тоже за WMI. Не в таком объёме, конечно. »ScriptOmatic выдает мне с этой функцией MsgBox(), который не влазит у меня на экран ноутбука. Я и так убрал кучу не всем нужных данных. Это же пример просто.
а если система не 32 bit как тогда? »Не знаю. У меня сейчас 64 нет.
будут ли они в принципе работать на 32 bit »Так пусть люди протестируют, я проверил на 4-х Win XP SP3, на 3-х разных компьютерах, у меня работает.

saavaage
06-10-2010, 17:04
Получился такой код:

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>


Global $DebugMode = 0
Opt("GUIOnEventMode", 1)




$hMain_GUI = GUICreate("Проверка безопасности OS", 619, 182, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 120)
$Security = GUICtrlCreateTabItem("Проверка на средства защиты OS")

GUICtrlCreateLabel('Ваша OS', 24, 52)
$OS = GUICtrlCreateInput('', 84, 50, 290, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('SP', 384, 52)
$SP = GUICtrlCreateInput('', 405, 50, 100, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('Bit', 515, 52)
$Bit = GUICtrlCreateInput(@OSArch , 535, 50, 50, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))


GUICtrlCreateLabel('Антивирус', 24, 75)
$Antivirus = GUICtrlCreateInput('', 84, 75, 500, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))
GUICtrlCreateLabel('Файрволл', 24, 100)
$Firewall = GUICtrlCreateInput('', 84, 100, 500, 20, BitOR($SS_LEFT, $ES_READONLY, $ES_AUTOHSCROLL))

If _ServiceExists('wscsvc') = 1 Then
_Antivir()
_Firewall()
Else
MsgBox(0, 'Уведомление', 'Для работы модуля необходимо активировать' &@CRLF &' в системе Центр Обеспечения Безопасности!')
EndIf
_OSInfo()

$Button_Save = GUICtrlCreateButton('Сохранить на РС', 501, 145, 100, 30)
GUICtrlSetOnEvent($Button_Save, "_Save")

GUICtrlCreateTabItem("")
GUISetState()

While 1
Sleep(100)
WEnd

Func CLOSEClicked()
Exit
EndFunc

Func _Save()
GUICtrlSetState($Button_Save, $GUI_DISABLE)
If FileExists(@DesktopDir&'\securety_report.txt') Then
MsgBox(4096, "securety report", 'securety_report.txt уже существует. Переменуйте' &@CRLF & 'его для предотвращения затирания информации!')
Else
$sData = GUICtrlRead($OS) & ' ' & GUICtrlRead($SP) & ' ' & GUICtrlRead($Bit) & ' ' &@CRLF& 'Антивирус: ' & GUICtrlRead($Antivirus) &@CRLF& 'Файрволл: ' & GUICtrlRead($Firewall)
$file = FileOpen(@DesktopDir&'\securety_report.txt',18)
FileWrite($file, $sData)
FileClose($file)
sleep(1000)
GUICtrlSetState($Button_Save, $GUI_ENABLE)
EndIf





EndFunc

Func _OSInfo()
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$OutputTitle = ""
$OutputOS = ""
$OutputSP = ""

$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) Then
Local $Object_Flag = 0
For $objItem In $colItems
$Object_Flag = 1
$OutputOS &= $objItem.Caption
$OutputSP &= $objItem.CSDVersion
Next
If $Object_Flag = 0 Then
GUICtrlSetData($OS, "Система не определена!")
GUICtrlSetData($SP, "SP не определен!")
Else
GUICtrlSetData($OS, $OutputOS)
GUICtrlSetData($SP, $OutputSP)
$OutputOS = ""
$OutputSP = ""
EndIf
EndIf
EndFunc

Func _Antivir()
$OutputAnt = ""

$objWMIService = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
$colItems = $objWMIService.ExecQuery("SELECT * FROM AntiVirusProduct", "WQL", 48)

If IsObj($colItems) Then
For $objItem In $colItems
$OutputAnt &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next
If $OutputAnt <> '' Then
GUICtrlSetData($Antivirus, StringTrimRight($OutputAnt, 2))
$OutputAnt = ""
Else
GUICtrlSetData($Antivirus, 'Антивирус отсутствует!')
EndIf
Endif
EndFunc

Func _Firewall()
$OutputFw = ""

$objWMIService = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
$colItems = $objWMIService.ExecQuery("SELECT * FROM FireWallProduct", "WQL", 48)

If IsObj($colItems) Then
For $objItem In $colItems
$OutputFw &= $objItem.DisplayName & " Version: " & $objItem.VersionNumber & ' '
Next
If $OutputFw <> '' Then
GUICtrlSetData($Firewall, StringTrimRight($OutputFw, 2))
$OutputFw = ""
Else
GUICtrlSetData($Firewall, 'Антивирус отсутствует!')
EndIf
Endif
EndFunc

Func _ServiceExists($nService)
Local $objWMIService ; Main object
Local $objQueryCollection ; Result of query
Local $hObj ; Current selected Object in $objQueryCollection

If $DebugMode = 1 Then ConsoleWrite(@CR)
If $DebugMode = 1 Then ConsoleWrite("_ServiceExists($nService)" & @CR)
If $DebugMode = 1 Then ConsoleWrite("_ServiceExists($nService)= " & $nService & @CR)

$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")

If IsObj($objWMIService) Then
If $DebugMode = 1 Then ConsoleWrite("$objWMIService is an Object" & @CR)
$objQueryCollection = $objWMIService.ExecQuery("SELECT * FROM Win32_Service Where Name = '" & $nService & "'")
Else
Return 110
EndIf

If IsObj($objQueryCollection) then
If $DebugMode = 1 Then ConsoleWrite("Collection returned by Query on $objWMIService)" & @CR)

For $hObj In $objQueryCollection
If $hObj.Name = $nService Then Return 1 ;Service found, return 0
Next ;<== $objWMIService In $hObj
Else
Return 110 ;Obj error
EndIf

Return 0 ;Service not found, return -1

EndFunc

Если все нормально, компилю утилиту и выкладываю на форуме. Проверьте, плиз...

madmasles
06-10-2010, 17:24
saavaage,
У меня все нормально. :)




© OSzone.net 2001-2012