Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zugriff auf Sicherheitscenter von WinXP SP2 (https://www.delphipraxis.net/47387-zugriff-auf-sicherheitscenter-von-winxp-sp2.html)

andimx 20. Jun 2005 16:56

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.

gsh 20. Jun 2005 17:04

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Mist :wall:

Ich nehme auch Information aus inoffiziellen Quellen :twisted:

toms 21. Jun 2005 05:46

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

gsh 21. Jun 2005 19:30

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
:shock: es schaut nicht schlecht aus wenn ich es nur verstehen würde

x000x 22. Jun 2005 00:54

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Moin,

das script läuft bei mir nicht... aber das hier vbs-example

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
'

ErazerZ 22. Jun 2005 01:12

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
ich hab mal ne delphi funktion darfür

Delphi-Quellcode:
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;
und der VBS script wäre dann
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

gsh 22. Jun 2005 16:22

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.

x000x 23. Jun 2005 02:03

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;

{..}

gsh 24. Jun 2005 11:40

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.

masc-online 10. Dez 2005 14:47

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:
unknown   := SWbemQuery._NewEnum;
Ich erhalte an der Stelle mit Delphi 3 immer den Fehler: Inkompatible Typen 'Variant' und 'IUnknown'.

Versuche ich mich an einer Typumwandlung

Delphi-Quellcode:
unknown   := Variant(SWbemQuery._NewEnum) as IUnknown;
bekomme ich die Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar.

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.
Seite 2 von 4     12 34      

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