Delphi-PRAXiS

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)

gsh 10. Jun 2005 13:07


Zugriff auf Sicherheitscenter von WinXP SP2
 
Hi DPler

Wie im Titel schon erwähnt möchte ich zugriff auf das Sicherheitscenter von Windows XP mit SP2 bekommen.
D.h.: Auslesen welcher Status z.b. der Virenschutz hat. UM in meinen Programm schreiben zu können: "Ihr System wird vom (Programm) geschüzt und hat gemeldet des es vollkommen einsatzfähig ist..."
Außerdem müsste ich wissen wie man die Dialoge z.b. für die Firewall aufruft.

Ich hoffe ihr könnt mir helfen. :coder2:

DP-Maintenance 10. Jun 2005 13:12

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Windows 9x / ME / 2000 / XP / 2003" nach "Windows API / MS.NET Framework API" verschoben.
Ich schiebe es mal in die API-Sparte, da das mit Delphi geloest werden soll ;)

barf00s 10. Jun 2005 13:14

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
hast du schonmal im MSDN gestöbert/gesucht?

gsh 10. Jun 2005 13:24

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
nein noch nicht

//edit: Hab die MSDN durchstöbert. Aber nichts :wall:

gsh 11. Jun 2005 16:02

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
*push*
:duck:

[edit=MrSpock]Ein push ist genug. Mfg, MrSpock[/edit]

Olli 19. Jun 2005 20:47

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Wenn du im XP-SP2-PSDK (eher gab's das Feature ja nicht) nichts findest, wird ein Zugriff u.U. garnicht möglich sein (außer mit unsauberen Methoden). Dieses PSDK habe ich aktuell aber leider nichtmal installiert, kann also nicht nachgucken.

MagicAndre1981 19. Jun 2005 21:08

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Wenn du auf der MSDN: http://msdn.microsoft.com/security/ nix findest dann geht das nicht. Aber das Sicherheitscenter wird wohl eh nur WMI-Befehle nutzen. Schau mal unter WMI, ob du was findest.

[Edit]

Zitat:

Zitat von http://support.microsoft.com/kb/883792
Wie erkennt das Windows-Sicherheitscenter Fremdanbieterprodukte und ihren Status?
A: Das Windows-Sicherheitscenter verwendet einen Zwei-Ebenen-Ansatz für die Statuserkennung. Es gibt die manuelle Ebene und die automatische Ebene über die Windows Management Instrumentation (WMI). Im manuellen Erkennungsmodus sucht das Windows-Sicherheitscenter nach Registrierungsschlüsseln und -dateien, die Microsoft von unabhängigen Softwareherstellern bereitgestellt werden. Anhand dieser Registrierungsschlüssel und -dateien kann das Windows-Sicherheitscenter den Status von unabhängiger Software erkennen. Im WMI-Modus bestimmen die Softwarehersteller selbst den Produktstatus und melden diesen Status über einen WMI-Anbieter an das Windows-Sicherheitscenter. In beiden Modi versucht das Windows-Sicherheitscenter zu bestimmen, ob Folgendes zutrifft:
• Ein Antivirusprogramm ist vorhanden.
• Die Antivirussignaturen sind auf dem neuesten Stand.
• Für Antivirusprogramme ist Echtzeit- oder Zugriffsüberwachung aktiviert.
• Bei Firewalls erkennt das Windows-Sicherheitscenter, ob eine Firewall eines Fremdanbieters installiert ist und ob die Firewall aktiviert ist oder nicht.


[/edit]

André

gsh 19. Jun 2005 22:02

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Hurra :mrgreen: des ganz klingt ja schon mal nicht schlecht

So mir ist es eigentlich egal welche Variante es soll halt funktionieren.
Aber da ich mich mit WMI nicht auskenne werd ich wahrscheinlich des mit der Regedit ihn arbeit nehmen.

Wenn jetzt jemand noch die Regedit schlüssel weiss dann wäre des super. :-D

gsh 20. Jun 2005 16:44

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
*push*
:duck:

MagicAndre1981 20. Jun 2005 16:52

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Zitat:

Zitat von gsh
*push*
:duck:

Was denn????

Ich weiß nicht alle Schüssel und sonst wohl auch keiner hier. Hast du mal im PSDK unter WMI nachgeschaut?

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

Luckie 10. Dez 2005 15:56

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Kann sein, dass Delphi 3 das noch nicht unterstützt, weil zu der Zeit WMI noch nicht unterstützt wurde.

x000x 10. Dez 2005 21:50

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Moin moin,

du könntest nochmal folgendes versuchen:
Delphi-Quellcode:
//...
var
//...
  pFetched    : LongInt;
  unknown     : Variant; //IUnknown;
  enumUnk     : IEnumUnknown;
//...
begin
//...
      unknown   := SWbemQuery._NewEnum;
      IUnknown(unknown).QueryInterface(IEnumVariant, enumUnk); // unknown.QueryInterface(IEnumVariant, enumUnk);
//...
      szWQL := 'Select * from FirewallProduct';
      SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48);
      unknown := SWbemQuery._NewEnum;
      IUnknown(unknown).QueryInterface(IEnumVariant, enumUnk); // unknown.QueryInterface(IEnumVariant, enumUnk);
//...
Falls das nicht funktionieren sollte, kannst du das ganze auch über die Unit WbemScripting_TLB realisieren, wie
du zu dieser kommst, findest du bestimmt hier im Forum...

masc-online 10. Dez 2005 22:18

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Zitat:

Zitat von x000x
Moin moin,
du könntest nochmal folgendes versuchen:
Delphi-Quellcode:
IUnknown(unknown).QueryInterface(IEnumVariant, enumUnk);

Hallo Peter,

kaum zu glauben, aber ich habe tatsächlich ewig an der richtigen Lösung vorbei gecastet. :oops: Vielen Dank für die Verhinderung schlafloser Nächte und für den entscheidenden Hinweis.

hincapie 9. Nov 2007 07:54

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Also irgendwie erhalte ich in der folgenden zeile einen Fehler:
Delphi-Quellcode:
      OleCheck(enumUnk.Next( 1, objVar, @pFetched ));
Delphi-Quellcode:
[Fehler] MDIFrame.pas(2449): Undefinierter Bezeichner: 'Next'
Ich benutze D5 Prof.

x000x 12. Nov 2007 18:18

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Moin moin,
Zitat:

Zitat von hincapie
Ich benutze D5 Prof.

ich habe hier aktuell kein Delphi 5, kann morgen erst nach schaun.

x000x 13. Nov 2007 18:25

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Moin moin,

also ich habs heute mit Delphi 5 getestet und der Code von oben fnuktioniert einwandfrei.
(Einfach in ein neues Project kopiert und uses ComObj, ActiveX eingefügt)
Kannst du mal die Deklaration der Variablen enumUnk prüfen? die
sollte vom Typ IEnumUnknown sein.

hincapie 15. Nov 2007 09:40

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Zitat:

Zitat von x000x
Moin moin,

also ich habs heute mit Delphi 5 getestet und der Code von oben fnuktioniert einwandfrei.
(Einfach in ein neues Project kopiert und uses ComObj, ActiveX eingefügt)
Kannst du mal die Deklaration der Variablen enumUnk prüfen? die
sollte vom Typ IEnumUnknown sein.

Hallo,
also ComObj und AktiveX stehen in den uses,
enumUnk ist so deklariert:
Delphi-Quellcode:
enumUnk     : IEnumUnknown;
trotzdem kommt der Fehler 'undefinierter Bezeichner: next'. :?: :(

x000x 19. Nov 2007 18:51

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Moin moin,

also dann stimmt wohl irgendwas mit deiner ActiveX Unit nicht, bzw. IEnumUnknown ist noch irgendwo anners deklariert :gruebel: Wo springt Delphi hin, wenn du
mit der Mause auf IEnumUnknown klickst und dabei [STRG] gedrückt hälst?
Es sollte die Unit ActiveX aufgehen und der Cursor sollte an die Stelle springen:
Delphi-Quellcode:
  {$EXTERNALSYM IEnumUnknown}
  IEnumUnknown = interface(IUnknown)
    ['{00000100-0000-0000-C000-000000000046}']
    function Next(celt: Longint; out elt;
      pceltFetched: PLongint): HResult; stdcall;
    function Skip(celt: Longint): HResult; stdcall;
    function Reset: HResult; stdcall;
    function Clone(out enm: IEnumUnknown): HResult; stdcall;
  end;
Du könntest enumUnk auch mal so deklarieren:
Delphi-Quellcode:
enumUnk     : ActiveX.IEnumUnknown;
Ansonsten hab ich im Moment keine weiteren Ideen woran es liegen könnte...

hincapie 20. Nov 2007 07:38

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Zitat:

Zitat von x000x
Du könntest enumUnk auch mal so deklarieren:
Delphi-Quellcode:
enumUnk     : ActiveX.IEnumUnknown;
Ansonsten hab ich im Moment keine weiteren Ideen woran es liegen könnte...

Das wars, jetzt funktioniert's! :thumb:
Danke! :-D

peschai 31. Jan 2008 16:26

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Hallo,

Bei neueren Delphi versionen sollte noch in uses die Unit "Variants" aufgenommen werden, ansonsten findet er das "VarToStr" nicht ... Könnte jemand das auch noch in dem zugeordneten Beitrag von CalganX in der CodeLibrary ergänzen ?

gauggi 31. Aug 2009 20:50

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Hallo!

Gibt es einen Ersatz für "Longet". Weder Lazarus noch mein Turbo Delphi mögen "Longet".

Die Muhkuh 31. Aug 2009 21:01

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Meinst Du LongInt?

x000x 1. Sep 2009 08:16

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
moin moin,

@gauggi: Wie ich dir schon per PN geschrieben habe, ich kann in meinem Quelltext kein Longet finden. Zeigt doch mal die Stelle wo du Probleme hast, ist ja evtl. nur nen typo...

Zacherl 4. Okt 2009 17:17

Re: Zugriff auf Sicherheitscenter von WinXP SP2
 
Unter Windows 7 scheint funktioniert das Auslesen leider nicht mehr :? Hat da jemand ne Idee? Ich vermute mal, da müssen nur ein Paar Strings angepasst werden.

x000x 5. Dez 2011 21:37

AW: Zugriff auf Sicherheitscenter von WinXP SP2
 
Moin moin,

der Vollständigkeit halber und um die Frage zu beantworten hier die Lösung (besser spät als nie):
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;
  boIsWinXP: Boolean;
const
  ARR_NAMESPACE : Array[False..True] of String = ('SecurityCenter2', //Vista/Win7
                                                  'SecurityCenter'); //WinXP

            procedure Display(szValue: String = ''; szData : String = '');
            begin
               Form1.Canvas.TextOut(20 , Counter, szValue);
               Form1.Canvas.TextOut(200, Counter, szData );
               inc(Counter, 17);
            end;

begin
   boIsWinXP := False; //get win version
   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\'+ARR_NAMESPACE[boIsWinXP], '', '', '');

      //szWQL := 'Select * from AntiSpywareProduct'; // not in WinXP
      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
         if boIsWinXP 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 begin
            Display('displayName:'              , VarToStr(objVar.displayName));
            Display('instanceGuid:'             , VarToStr(objVar.instanceGuid));
            Display('pathToSignedProductExe:'   , VarToStr(objVar.pathToSignedProductExe));
            Display('pathToSignedReportingExe:' , VarToStr(objVar.pathToSignedReportingExe));
            Display('productState:'             , VarToStr(objVar.productState));
         end;
      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
         if boIsWinXP 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 begin
            Display('displayName:'              , VarToStr(objVar.displayName));
            Display('instanceGuid:'             , VarToStr(objVar.instanceGuid));
            Display('pathToSignedProductExe:'   , VarToStr(objVar.pathToSignedProductExe));
            Display('pathToSignedReportingExe:' , VarToStr(objVar.pathToSignedReportingExe));
            Display('productState:'             , VarToStr(objVar.productState));
         end;
      end else
         Display('No supported FW products found...');
   finally
      CoUnInitialize;
   end;
end;
Unter Vista/Win7 funktioniert ebenfalls die Abfrage auf: AntiSpywareProduct (Siehe Kommentar)

Siehe auch: The Road to Delphi


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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