Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benutzerrechte (https://www.delphipraxis.net/10929-benutzerrechte.html)

fredi 28. Okt 2003 10:12


Benutzerrechte
 
Hallo alle,
ich möchte von einer Datei die Benútzerrechte erfahren und habe dazu auch ein kleines Beispiel aus dem
Entwickler Ausgabe 6/2003 seite 77 probiert.
Leider bringe ich das nicht zum laufen, folgende fehlermeldungen bekomme ich:
[Fehler] Unit1.pas(30): Undefinierter Bezeichner: 'ISWbemServices'
[Fehler] Unit1.pas(39): Undefinierter Bezeichner: 'SWbemLocator1'

wer kann mir einen tipp geben damit mein Programm diese variablen kennt ?
Ich verwende D5, WIN2000.

danke für eure Hilfe
fredi.

Beispielcode:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, StdCtrls, ShlObj, ActiveX, shellapi;


procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 aSrv         :ISWbemServices;
 vObj         :OleVariant;
 iRet         :Integer;
 vObjDesc     :OleVariant;
 vDACL        :Variant;
 vDACLEnum    :OleVariant;
 vNVS         :OleVariant;
 iHigh, iLow, I:Integer;
begin
  aSrv:=SWbemLocator1.ConnetServer('','','','','','',0,vNVS);
  vObj:=aSrv.Get('Win32_LogicalFileSecuritySetting="C:\trace.txt"',0,vNVS);
  iRet:=vObj.GetSecurityDescription(vObjDesc);
  If iRet <> 0 then
    begin
    showMessage(IntToStr(iRet));
    EXIT;
    end;
  vDACL:=vObjDesc.DACL;
  iHigh:=VarArrayHighBound(vDACL, 1);
  iLow :=VarArrayLowBound(vDACL,1);
  for i:=iLow to iHigh do
    begin
    ListBox1.Items.Add(vDACL[i].Trustee.Name);
    ListBox1.Items.Add(vDACL[i].AccessMask);
    end;
end;
[edit=Luckie]Delphi-Tags eingefügt. Beim nächsten mal bitte selber machen. Danke Mfg, Luckie[/edit]

s14 28. Okt 2003 10:32

Re: Benutzerrechte
 
Hallo fredi,
ich glaube da muss erst die Wbem-Typbibliothek in die Uses-Klausel eingebunden werden.

Gruß
Andy

fredi 28. Okt 2003 10:40

Re: Benutzerrechte
 
danke für deine rasche antwort,
in meiner Typbibliothek gibt es leider keine 'Wbem' !
hat die event. einen anderen namen, was muß ich importieren ?
fredi

Motzi 28. Okt 2003 10:50

Re: Benutzerrechte
 
Du musst zuerst die WbemScripting-Typlibrary importieren... Delphi erzeugt dann eine Datei mit demselben Namen, nur mit angehängtem "_TLB.pas" und die brauchst du dann in deiner uses-Liste!

Alternativ zu WMI kannst du das ganze aber auch über die klassischen APIs machen - ist aber nicht unbedingt einfacher (SecurityDescritoren, SACLs, DACLs, ACEs, ...)!

fredi 28. Okt 2003 11:37

Re: Benutzerrechte
 
Hi Motzi,
danke für deine hilfe.
habe jetzt die typ bibliothek in mein projekt importiert.
Jetzt kennt er aber SWbemLocator1 wieder nicht !
Was mich ein wenig stutzig macht ist, daß in der unit WbemScripting_TLB kein classe mit SWbemLocator1 steht.
Im Beispielcode wird aber SWbemLocator1 geschrieben. Ist da ein fehler oder muß die
SWbemLocator1 erst erzeugt werden ?
Wenn diese jedoch erst erzeugt werden muß, wie ?

[Fehler] Unit1.pas(40): Undefinierter Bezeichner: 'SWbemLocator1'

kannst du mir da noch einen tipp geben.
danke im voraus fredi.

Motzi 28. Okt 2003 11:42

Re: Benutzerrechte
 
Ich nehme mal stark an, das SWbemLocator1 ein TSWbemLocator-Objekt auf deiner Form ist...!

fredi 28. Okt 2003 11:48

Re: Benutzerrechte
 
danke an alle,
es läuft....

fredi

fredi 28. Okt 2003 11:58

Re: Benutzerrechte
 
kommando zurück, es funkt doch nicht so wie es sollte.
bekomme bei zeile : vObj:=aSrv.Get('Win32_LogicalFileSecuritySetting=" C:\comp.txt"',0,vNVS);
Klasse EOleException -> 'Ungültiger Objektpfad'

den pfad und die datei comp.txt gibt es aber.

weiß wer rat ?

fredi

s14 28. Okt 2003 13:29

Re: Benutzerrechte
 
Hallo fredi,

mir sind zwei "Fehler" aufgefallen:

Delphi-Quellcode:
  vObj := aSrv.Get('Win32_LogicalFileSecuritySetting=''C:\trace.txt''', 0, vNVS);
  iRet := vObj.GetSecurityDescriptor(vObjDesc);
Die Pfadangabe muss mit zwei Hochkommas angegeben werden, nicht mit ".
Dann noch "SecurityDescriptor" statt "SecurityDescription".

Ersetze die oberen Zeilen, dann sollte es funktionieren :)
Wenigstens bei mir geht's so.

Gruß
s14

fredi 28. Okt 2003 13:35

Re: Benutzerrechte
 
Hi s14,
danke für die hilfe,
ich habe die Fileübergabe schon mit einem opendialog gelöst, weil ich mit den hochkommas und gänsefüsschen schon ein problem vorausgesehen habe, leider trotzdem ohne erfolg.

vObj:=aSrv.Get('Win32_LogicalFileSecuritySetting=' + OpenDialog1.FileName,0,vNVS);

danke auch für den hinweis des zweiten fehlers.
Falls du noch eine idee hast, bite teil mir diese mit.

fredi


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz