![]() |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Aus eigener Erfahrung heraus:
Die Informationen über das WSC (Windows Security Center) sind als "NON-PUBLIC" markiert bei Microsoft. D.h. die Daten wie man das Ding ansteuert erhalten nur Personen die von Microsoft als Trusted eingestuft worden sind. Ich hab auch schon vergeblich versucht das ding anzusteuern. Ich weiß aus zuverläßiger Quelle, das es sogar eine direkte API für das WSC gibt, aber es ist nichts veröffentlicht. |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Mist :wall:
Ich nehme auch Information aus inoffiziellen Quellen :twisted: |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
hi,
Vielleicht hilft dir das vbs Script weiter...
Code:
'******************************************************************************
'AvSettings-wmi.vbs 'Author: Peter Costantini, The Microsoft Scripting Guys 'Date: 9/1/04 'Version: 1.0 'This script reads properties of an installed anti-virus product, using WMI. 'root\SecurityCenter:AntiVirusProduct is new on Windows XP Service Pack 2. '****************************************************************************** strComputer = "." 'Can set to remote machine. Set objAntiVirusProduct = GetObject _ ("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & _ "\root\SecurityCenter:AntiVirusProduct") If Err = 0 Then Err.Clear WScript.Echo "companyName: " & objAntiVirusProduct.companyName WScript.Echo "displayName: " & objAntiVirusProduct.displayName WScript.Echo "enableOnAccessUIMd5Hash: " & _ objAntiVirusProduct.enableOnAccessUIMd5Hash WScript.Echo "enableOnAccessUIParameters: " & _ objAntiVirusProduct.enableOnAccessUIParameters WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid WScript.Echo "onAccessScanningEnabled: " & _ objAntiVirusProduct.onAccessScanningEnabled WScript.Echo "pathToEnableOnAccessUI: " & _ objAntiVirusProduct.pathToEnableOnAccessUI WScript.Echo "pathToUpdateUI: " & objAntiVirusProduct.pathToUpdateUI WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate WScript.Echo "updateUIMd5Hash: " & objAntiVirusProduct.updateUIMd5Hash WScript.Echo "updateUIParameters: " & objAntiVirusProduct.updateUIParameters WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber Else WScript.Echo "Unable to connect to AntiVirusProduct class on " & _ strComputer & "." WScript.Echo " Error Number:" & Err.Number WScript.Echo " Source:" & Err.Source WScript.Echo " Description:" & Err.Description End If |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
:shock: es schaut nicht schlecht aus wenn ich es nur verstehen würde
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin,
das script läuft bei mir nicht... aber das hier ![]() Habs hier mal rein kopiert:
Delphi-Quellcode:
'**********************************
'by "Peter Urbanetz" <peter@[EMAIL PROTECTED] > Oct 14, 2004 at 12:53 PM '********************************** On Error Resume Next strComputer = "." ' compname Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\SecurityCenter") Set colItems = objWMIService.ExecQuery("Select * from FirewallProduct",,48) For Each objItem in colItems MsgBox objItem.getObjectText_ Next Set colItems = objWMIService.ExecQuery("Select * from AntiVirusProduct",,48) For Each objItem in colItems MsgBox objItem.getObjectText_ Next '********************************** 'I hope it is helpfull 'Peter ' |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
ich hab mal ne delphi funktion darfür
Delphi-Quellcode:
und der VBS script wäre dann
procedure GetFirewallandAntiVirusSoftware(SLAntiVirus, SLFirewall: TStringList);
var f: TextFile; VBSFile, InfoFile: String; SL: TStringList; i: Integer; begin SL := TStringList.Create; VBSFile := Copy(ParamStr(0), 1, Length(ParamStr(0)) -4) + '.vbs'; InfoFile := Copy(ParamStr(0), 1, Length(ParamStr(0)) -4) + '.erz'; AssignFile(f, VBSFile); ReWrite(f); // Stuff is needed .. WriteLn(f, 'Set objSecurityCenter = GetObject("winmgmts:\\.\root\SecurityCenter")'); WriteLn(f, 'Set colFirewall = objSecurityCenter.ExecQuery("Select * From FirewallProduct",,48)'); WriteLn(f, 'Set colAntiVirus = objSecurityCenter.ExecQuery("Select * From AntiVirusProduct",,48)'); WriteLn(f, 'Set objFileSystem = CreateObject("Scripting.fileSystemObject")'); WriteLn(f, 'Set objFile = objFileSystem.CreateTextFile("' + InfoFile + '", True)'); WriteLn(f, 'Enter = Chr(13) + Chr(10)'); WriteLn(f, 'CountFW = 0'); WriteLn(f, 'CountAV = 0'); // Firewall(s) WriteLn(f, 'For Each objFirewall In colFirewall'); WriteLn(f, 'CountFW = CountFW + 1'); WriteLn(f, 'Info = Info & "F" & CountFw & ") " & objFirewall.displayName & " v" & objFirewall.versionNumber & Enter'); WriteLn(f, 'Next'); // AntiVirus WriteLn(f, 'For Each objAntiVirus In colAntiVirus'); WriteLn(f, 'CountAV = CountAV + 1'); WriteLn(f, 'Info = Info & "A" & CountAV & ") " & objAntiVirus.displayName & " v" & objAntiVirus.versionNumber & Enter'); WriteLn(f, 'Next'); // Write to File WriteLn(f, 'objFile.WriteLine(Info)'); WriteLn(f, 'objFile.Close'); CloseFile(f); ShellExecute(0, 'open', PChar(VBSFile), nil, nil, SW_HIDE); // 2 sec warten, is genug Sleep(2000); SL.LoadFromFile(InfoFile); for i := 0 to SL.Count -1 do begin if Copy(SL[i], 1, 1) = 'F' then SLFirewall.Add(Copy(SL[i], 2, Length(SL[i]))) else if Copy(SL[i], 1, 1) = 'A' then SLAntiVirus.Add(Copy(SL[i], 2, Length(SL[i]))) end; DeleteFile(VBSFile); DeleteFile(InfoFile); end; // aufrufen procedure TfrmMain.Button1Click(Sender: TObject); var SLAntiVirus, SLFirewall: TStringList; i: Integer; begin lbAntiVirus.Clear; // ListBox lbFirewall.Clear; SLAntiVirus := TStringList.Create; SLFirewall := TStringList.Create; GetFirewallandAntiVirusSoftware(SLAntiVirus, SLFirewall); for i := 0 to SLAntiVirus.Count -1 do lbAntiVirus.Items.Add(SLAntiVirus[i]); for i := 0 to SLFirewall.Count -1 do lbFirewall.Items.Add(SLFirewall[i]); end;
Delphi-Quellcode:
Set objSecurityCenter = GetObject("winmgmts:\\.\root\SecurityCenter")
Set colFirewall = objSecurityCenter.ExecQuery("Select * From FirewallProduct",,48) Set colAntiVirus = objSecurityCenter.ExecQuery("Select * From AntiVirusProduct",,48) Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objFile = objFileSystem.CreateTextFile("C:\Filename.erz", True) Enter = Chr(13) + Chr(10) CountFW = 0 CountAV = 0 For Each objFirewall In colFirewall CountFW = CountFW + 1 Info = Info & "F" & CountFw & ") " & objFirewall.displayName & " v" & objFirewall.versionNumber & Enter Next For Each objAntiVirus In colAntiVirus CountAV = CountAV + 1 Info = Info & "A" & CountAV & ") " & objAntiVirus.displayName & " v" & objAntiVirus.versionNumber & Enter Next objFile.WriteLine(Info) objFile.Close |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
klingt alles super und funktioniert auch alles einwandfrei aber gibt es nicht eine gänzlich aus Delphi-Code bestehende Lösung, weil des mit die 2 sec. warten ist total schlecht. z.b. am Afnag wo isch probiert habe bin ich fast verzeifelt weil er dann nie die Entdatei gefunden hat. Was war der Grund? NORTAN den er hat mir die ganze Zeit den Script gesperrt.
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
reicht dir evtl. das?
Delphi-Quellcode:
{..}
uses {..,} ComObj, ActiveX; {..} procedure TForm1.Button1Click(Sender: TObject); var SWbem, SWbemCon, SWbemQuery, objVar : OleVariant; szWQL : String; pFetched : LongInt; unknown : IUnknown; enumUnk : IEnumUnknown; Counter : Integer; procedure Display(szValue: String = ''; szData : String = ''); begin Form1.Canvas.TextOut(20 , Counter, szValue); Form1.Canvas.TextOut(200, Counter, szData ); inc(Counter, 17); end; begin Canvas.FillRect(Rect(0,0,form1.Width,form1.Height)); Counter := 20; CoInitialize(nil); try SWbem := CreateOleObject('WbemScripting.SWbemLocator'); // strServer, strNamespace, strUser, strPassword, strLocale, strAuthority, // iSecurityFlags, objwbemNamedValueSet SWbemCon := SWbem.ConnectServer('', 'root\SecurityCenter', '', '', ''); szWQL := 'Select * from AntiVirusProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; unknown.QueryInterface(IEnumVariant, enumUnk); VarClear(objVar); OleCheck(enumUnk.Next( 1, objVar, @pFetched )); if (pFetched <> 0) then begin Display('companyName:' , VarToStr(objVar.companyName)); Display('displayName:' , VarToStr(objVar.displayName)); Display('enableOnAccessUIMd5Hash:' , VarToStr(objVar.enableOnAccessUIMd5Hash)); Display('enableOnAccessUIParameters:', VarToStr(objVar.enableOnAccessUIParameters)); Display('instanceGuid:' , VarToStr(objVar.instanceGuid)); Display('onAccessScanningEnabled:' , VarToStr(objVar.onAccessScanningEnabled)); Display('pathToEnableOnAccessUI:' , VarToStr(objVar.pathToEnableOnAccessUI)); Display('pathToUpdateUI:' , VarToStr(objVar.pathToUpdateUI)); Display('productUptoDate:' , VarToStr(objVar.productUptoDate)); Display('updateUIMd5Hash:' , VarToStr(objVar.updateUIMd5Hash)); Display('updateUIParameters:' , VarToStr(objVar.updateUIParameters)); Display('versionNumber:' , VarToStr(objVar.versionNumber)); end else Display('No supported AV products found...'); Display('---------------------------------------------'); szWQL := 'Select * from FirewallProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; unknown.QueryInterface(IEnumVariant, enumUnk); VarClear(objVar); OleCheck(enumUnk.Next( 1, objVar, @pFetched )); if (pFetched <> 0) then begin Display('Company Name:' , VarToStr(objVar.companyName)); Display('Display Name:' , VarToStr(objVar.displayName)); Display('Enabled:' , VarToStr(objVar.enabled)); Display('enableUIParameters:', VarToStr(objVar.enableUIParameters)); Display('pathToEnableUI:' , VarToStr(objVar.pathToEnableUI)); Display('versionNumber:' , VarToStr(objVar.versionNumber)); end else Display('No supported FW products found...'); finally CoUnInitialize; end; end; {..} |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
@x000x: funktioniert super, danke :thumb: :dance:
Jetzt noch ein paar Fragen: Also des Sicherheitsfenster hat unten so die drei Sachen: Internet-Optionen, Automatisches Update, Windows Firewall. Internet-Optionen ist kein Problem aber wie kann ich den Dialog Automatisches Update und Windows Firewall aufrufen? Außerdem war stellt sich auch die Frage wie ich den Status des Automatisches Update und der Windows Firewall bekomme. |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Hallo,
ich finde diesen Code-Schnipsel für die Delphi-only-Lösung sehr hilfreich. Nur leider bekomme ich ihn nur unter Delphi 7 personal und nicht unter Delphi 3 professional zum Laufen. An der folgenden Zeile stört sich der Compiler:
Delphi-Quellcode:
Ich erhalte an der Stelle mit Delphi 3 immer den Fehler: Inkompatible Typen 'Variant' und 'IUnknown'.
unknown := SWbemQuery._NewEnum;
Versuche ich mich an einer Typumwandlung
Delphi-Quellcode:
bekomme ich die Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar.
unknown := Variant(SWbemQuery._NewEnum) as IUnknown;
Gibt's für Delphi 3 an der Stelle noch eine Chance? Kann mir bitte jemand helfen? Grüße aus Stuttgart, Marian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz