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 Sicherheitseinstellungen von Dateien ändern (https://www.delphipraxis.net/7432-sicherheitseinstellungen-von-dateien-aendern.html)

Tpercon 12. Aug 2003 09:55


Sicherheitseinstellungen von Dateien ändern
 
In der MSDN habe ich dazu folgendes gefunden
file security and access rights
Komme damit & den weiterführenden Links aber noch nicht klar. Weiß nicht, wie ich die Funktionen richtig kombinieren muß.

Wie kann ich die Sicherheitseinstellungen für bestimmte Dateien ändern? Ein kleines Code Beispiel wäre sehr hilfreich.

Tpercon 13. Aug 2003 08:37

Re: Sicherheitseinstellungen von Dateien ändern
 
Weiß keiner nen Ansatz?
Möchte nur paar Rechte entfernen bzw. hinzufügen können.

oki 13. Aug 2003 08:43

Re: Sicherheitseinstellungen von Dateien ändern
 
Hallo,

schau mal in der OH unter SetFileAttributes nach.
Das währe jetzt aber eine Änderung direkt für die Datei, nicht fürs System.

Schau mir gleich noch mal deinen Link an.

Gruß oki

oki 13. Aug 2003 08:55

Re: Sicherheitseinstellungen von Dateien ändern
 
Ja o.k.,

da mußt du dir nur erst das Handle mit createFile holen um dann die Attribute zu setzen.

Hab ich alles so aber noch nie gebraucht und deshalb auch keine praktischen Erfahrungen.

Probiers erst mal aus.

Gruß oki

Tpercon 13. Aug 2003 08:56

Re: Sicherheitseinstellungen von Dateien ändern
 
Genau, die Funktion SetFileAttributes kann zu wenig. Ich brauche eine Möglichkeit die Berechtigungen der Sicherheitseinstellungen für eine Datei ändern zu können. Und das geht irgendwie über SetSecurityInfo, nur ich weiß praktisch nicht richtig wie.

oki 13. Aug 2003 09:28

Re: Sicherheitseinstellungen von Dateien ändern
 
Also,
hab ich so noch nie gemacht und ist auch im Ansatz ungetestet.

Ich denke aber, so kommst du weiter.

Delphi-Quellcode:
Function OpenFileSecure: Boolean;
var FiH : THandle;
    FiName : String;
    SecAtr : Security_Attributes;
begin
  Result := False;
  // Dateiname mit komlettem Pfad
  FiName := 'MeineDatei' + 0;
  // Security_Attributes - Struktur füllen
  Fillchar(SecAtr, Length(Security_Attributes), 0);
  secAtr.bInheritHandle := True;
  secAtr.nLength := Length(SecAtr);
  // Handle holen
  FiH := CreateFile( @FiName[1],
         FILE_ALL_ACCESS,
         FILE_SHARE_WRITE,
         secAtr,
         OPEN_EXISTING,
         FILE_ATTRIBUTE_NORMAL,
         0);
  // Handle prüfen
  If FiH = 0 then Exit;
  // und jetzt SetSecurityInfo

  Result := True;
end;
Nach dem alles geklappt hat vergiß CloseFile nicht!

Gruß oki

Tpercon 13. Aug 2003 10:21

Re: Sicherheitseinstellungen von Dateien ändern
 
Danke, der Ansatz ist OK. Nur das Problem im weiteren ist der security descriptor. Wie arbeitet man damit?
Mir würde ja schon das Anzeigen davon erstmal genügen.

oki 13. Aug 2003 13:01

Re: Sicherheitseinstellungen von Dateien ändern
 
Mach es dir einfach,

ruf erst GetSecurityInfo oder GetNamedSecurityInfo auf, vweänder die entsprechenden Flags und setze die neuen Werte dann über sie ensprechende Set-Methode.

Vergiß aber den ganzen Freigabekram nicht. Also immer schön die OH lesen.

Gruß oki

Tpercon 13. Aug 2003 13:06

Re: Sicherheitseinstellungen von Dateien ändern
 
Ich würde nur gerne erstmal die Infos anzeigen lassen und das alles besser zu verstehen. Nur bekomm ich dieses Auslesen und Anzeigen (Umwandlung dere Infos als strings) nicht hin.

oki 13. Aug 2003 13:10

Re: Sicherheitseinstellungen von Dateien ändern
 
ich muß jetzt leider los,

probier mal rum, sag mir bis morgen wie weit du bist und ich helf weiter.

(Vielleicht findet sich noch einer zwischendurch, der dir mehr dazu sagen kann)

Gruß oki

Tpercon 13. Aug 2003 13:37

Re: Sicherheitseinstellungen von Dateien ändern
 
Zur Zeit sieht es so aus:
Delphi-Quellcode:
var FileH : THandle;
    FileName : String;
    SecAtr : Security_Attributes;
begin
  if OpenDialog1.Execute then begin
    // Dateiname mit komlettem Pfad
    FileName := OpenDialog1.FileName;
    // Security_Attributes - Struktur füllen
    Fillchar(SecAtr, SizeOf(Security_Attributes), 0);
    SecAtr.bInheritHandle := True;
    SecAtr.nLength := SizeOf(SecAtr);
//    SecAtr.lpSecurityDescriptor :=
    // Handle holen
    FileH := CreateFile( PChar(FileName),
           GENERIC_ALL,//FILE_ALL_ACCESS,
           FILE_SHARE_WRITE,
           SecAtr,
           OPEN_EXISTING,
           FILE_ATTRIBUTE_NORMAL,
           0);
    // Handle prüfen
    If (FileH <> 0) and (GetLastError = Error_Success) then begin
    // und jetzt SetSecurityInfo auslesen

    end;
    CloseHandle(FileH);
  end;
end;
Also fast alles noch von dir. Nur ich bekomme das einfach nicht richtig weiter hin. Zum verzweifeln.

[edit=sakura]Doppelpost gelöscht. Mfg, sakura[/edit]

oki 14. Aug 2003 10:18

Re: Sicherheitseinstellungen von Dateien ändern
 
Hi,

beim rumtesten mit CreateFile bin ich auf die API-Methode GetFileSecurity gestoßen. Da kann man sich CreateFile offensichtlich spaaren.

GetSecurityInfo hat mein Compiler aber nicht gefunden. Ich nutze D5 und arbeite auf Win2000.

GetSecurityInfo ist auch eine reine NT-Methode!

Da ich den Code jetzt auch mal ausprobiert habe gebe ich die hier gleich mal die Korrektur. Da waren einige Flüchtigkeitsfehler drin.

Delphi-Quellcode:

  private
    { Private-Deklarationen }
    FFiH : THandle;

Function TForm1.OpenFileSecure: Boolean;
var FiName : String;
    SecAtr : Security_Attributes;
    SD : SECURITY_DESCRIPTOR;
begin
  Result := False;
  // Dateiname mit komlettem Pfad
  FiName := Edit1.Text + #0;
  If Length(FiName) = 0 then Exit;
  // Security_Attributes - Struktur füllen
  Fillchar(SecAtr, Sizeof(Security_Attributes), 0);
  secAtr.bInheritHandle := True;
  secAtr.nLength := Sizeof(SecAtr);
  // Handle hilen
  FFiH := CreateFile( @FiName[1],
         GENERIC_READ or GENERIC_WRITE,
         FILE_SHARE_WRITE,
         @secAtr,
         OPEN_EXISTING,
         FILE_ATTRIBUTE_NORMAL,
         0);
  // Handle prüfen
  If (FFiH = 0) or (GetLastError <> Error_Success) then Exit;
  ChangeItems(FFiH);
  // und jetzt SetSecurityInfo
{  GetSecurityInfo(FFiH,
                  SE_FILE_OBJECT,
                  OWNER_SECURITY_INFORMATION,
                  nil,
                  nil,
                  nil,
                  nil,
                  nil);
}  Result := True;
end;
Mal schaun wie wir so weiterkommen.

Tpercon 14. Aug 2003 10:32

Re: Sicherheitseinstellungen von Dateien ändern
 
Mit dem GetSecurityInfo hast du natürlich Recht. :oops:

So, jetzt sind wir also bei dem tollen Auslesen der Infos (PSECURITY_DESCRIPTOR) mit dem Setzen von SECURITY_INFORMATION die wir von GetFileSecurity bekommen.

oki 14. Aug 2003 12:39

Re: Sicherheitseinstellungen von Dateien ändern
 
o.k.,

ich hab beim verfolgen von PSECURITY_DESCRIPTOR in der Unit Windows folgende Structur gefunden:
Delphi-Quellcode:
  PSecurityDescriptor = ^TSecurityDescriptor;
  _SECURITY_DESCRIPTOR = record
    Revision: Byte;
    Sbz1: Byte;
    Control: SECURITY_DESCRIPTOR_CONTROL;
    Owner: PSID;
    Group: PSID;
    Sacl: PACL;
    Dacl: PACL;
  end;
So wie ich es verstanden habe kann man hier jedoch nicht auf die entsprechenden Felder direkt zugreifen, sondern muß sich weiterer Methoden zum Auslesen bedienen.

In der Hilfe für GetFileSecurity finden sich entsprechende Verweise:
Zitat:

See Also

GetSecurityDescriptorControl, GetSecurityDescriptorDacl, GetSecurityDescriptorGroup, GetSecurityDescriptorLength, GetSecurityDescriptorOwner, GetSecurityDescriptorSacl, InitializeSecurityDescriptor, IsValidSecurityDescriptor, SetSecurityDescriptorDacl, SetSecurityDescriptorGroup, SetSecurityDescriptorOwner, SetSecurityDescriptorSacl
Leider haben diese bei mir im Moment nur Fehler gebracht. probier es selber mal aus!

Gruß oki

Tpercon 14. Aug 2003 14:22

Re: Sicherheitseinstellungen von Dateien ändern
 
Den Typ PSecurityDescriptor hatte ich auch gefunden, nur darin sind die Eigenschaften wieder extrem verschachtelt (verweisen auf andere Typen), was das Auslesen hier auch zum Problem macht. :(

Schauen wir mal wie weit wir kommen.

oki 14. Aug 2003 14:38

Re: Sicherheitseinstellungen von Dateien ändern
 
Ja also, wir kommen so weiter:

in der Hilfe zu GetFileSecurity ist folgendes vermerkt:
Zitat:

pSecurityDescriptor

Points to a buffer that receives a copy of the security descriptor of the object specified by the lpFileName parameter. The calling process must have the right to view the specified aspects of the object's security status. The SECURITY_DESCRIPTOR structure is returned in self-relative format.

unter SECURITY_DESCRIPTOR erscheint dann die Hilfe zu SECURITY_DESCRIPTOR
.

Dort findest du die Links zu den von mir angeführten Methoden.

Somit heißt das, das wenn du den PSECURITY_DESCRIPTOR mit GetFileSecurity bekommen hast, du die Elemente der Struktur (wie oben) mit diesen Methoden ermitteln kannst.

Bsp.:

Zitat:

The GetSecurityDescriptorControl function retrieves a security descriptor's control and revision information.

BOOL GetSecurityDescriptorControl(

PSECURITY_DESCRIPTOR pSecurityDescriptor, // address of security descriptor
PSECURITY_DESCRIPTOR_CONTROL pControl, // address of control structure
LPDWORD lpdwRevision // address of revision value
);


Parameters

pSecurityDescriptor

Points to a SECURITY_DESCRIPTOR structure whose control and revision information the function retrieves.

pControl

Points to a SECURITY_DESCRIPTOR_CONTROL structure receiving the security descriptor's control information.

lpdwRevision

Points to a variable receiving the security descriptor's revision value. This value is always set, even when GetSecurityDescriptorControl returns an error.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
und eben so weiter!

Gruß oki

Tpercon 14. Aug 2003 14:45

Re: Sicherheitseinstellungen von Dateien ändern
 
Hm, nur ich scheitere ja gerade an der Verwendung von GetSecurityDescriptorControl und der SECURITY_DESCRIPTOR_CONTROL Struktur. Daher komm ich ja nicht weiter.

oki 14. Aug 2003 14:52

Re: Sicherheitseinstellungen von Dateien ändern
 
Hi,
poste mal schnell den aktulen Stand deines Codes.

Gruß oki

Tpercon 14. Aug 2003 15:10

Re: Sicherheitseinstellungen von Dateien ändern
 
Hier mein Stand, wie du siehst ist GetSecurityDescriptorControl noch ziemlich mit Fragezeichen behaftet. Der Weg müßte aber OK sein.
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    FFiH : THandle;
...

procedure TForm1.Button1Click(Sender: TObject);
var FileName: String;
    SecAtr: Security_Attributes;
    SD: SECURITY_DESCRIPTOR;
    PSD: PSecurity_Descriptor;
    PSDSize, needed: dword;
begin
  if OpenDialog1.Execute then begin
    FileName := OpenDIalog1.FileName;
    If Length(FileName) = 0 then Exit;
    // Security_Attributes - Struktur füllen
    Fillchar(SecAtr, Sizeof(Security_Attributes), 0);
    secAtr.bInheritHandle := True;
    secAtr.nLength := Sizeof(SecAtr);
//    secAtr.lpSecurityDescriptor := nil;

    if (GetFileSecurity(PChar(FileName),
                       OWNER_SECURITY_INFORMATION,
                       PSD,
                       PSDSize,
                       needed) = true) and (GetLastError = Error_Success)
                        then begin
      if (GetSecurityDescriptorControl(PSD,
                                   SE_OWNER_DEFAULTED,
                                   ?) = true) and (GetLastError = Error_Success)
                        then begin

      end;
    end;
  end;
end;

oki 14. Aug 2003 15:43

Re: Sicherheitseinstellungen von Dateien ändern
 
jo,

ich denk so:
Delphi-Quellcode:

var PControl : SECURITY_DESCRIPTOR_CONTROL;
    Revision : DWORD;

 if (GetSecurityDescriptorControl(PSD,
                                   PControl,
            Revision
                                   ) ) and (GetLastError = Error_Success)
                        then begin
probier mal.

Gruß oki

Tpercon 14. Aug 2003 15:47

Re: Sicherheitseinstellungen von Dateien ändern
 
Nur das PControl muß doch entsprechend dem OWNER_SECURITY_INFORMATION im GetFileSecurity gesetzt werden? Das liefert doch ncihts zurück?!

oki 15. Aug 2003 11:13

Re: Sicherheitseinstellungen von Dateien ändern
 
Wer behauptet das?

Tpercon 15. Aug 2003 11:19

Re: Sicherheitseinstellungen von Dateien ändern
 
Das habe ich mir so gedacht?! :roll:

oki 15. Aug 2003 11:46

Re: Sicherheitseinstellungen von Dateien ändern
 
Da kann ja jeder kommen :lol: !

Schau noch mal in der OH nach.

Gruß oki

Tpercon 15. Aug 2003 12:00

Re: Sicherheitseinstellungen von Dateien ändern
 
Ups, das OWNER_SECURITY_INFORMATION bekommt ja den Wert zugewiesen. :oops:

Bist du evtl. schon etwas weiter gekommen?

oki 15. Aug 2003 12:46

Re: Sicherheitseinstellungen von Dateien ändern
 
Nööö!

bei mir geht gar nichts und ich sitze noch nicht mal an meinem Rechner.

Alle pure Theorie.

Gruß oki

Tpercon 15. Aug 2003 12:51

Re: Sicherheitseinstellungen von Dateien ändern
 
Zitat:

Zitat von oki
Alle pure Theorie.

Schade, ich bekomm das nämlich einfach nicht hin. :(

Christian Seehase 16. Aug 2003 00:45

Re: Sicherheitseinstellungen von Dateien ändern
 
Moin Tpercon,

probier mal dies:

Delphi-Quellcode:
var
  psd    : PSECURITY_DESCRIPTOR;
  dwLen  : DWORD;
  psdc   : SECURITY_DESCRIPTOR_CONTROL;
  dwDummy : DWORD;

begin
  if not OpenDialog1.Execute then exit;
  // erforderliche Buffergrösse ermitteln
  dwLen := 0;
  psd  := nil;
  GetFileSecurity(PChar(OpenDialog1.FileName),OWNER_SECURITY_INFORMATION,psd,0,dwLen);
  // Security Descriptor auslesen
  psd := AllocMem(dwLen);
  try
    if not GetFileSecurity(PChar(OpenDialog1.FileName),OWNER_SECURITY_INFORMATION,psd,dwLen,dwLen) then begin
      ShowMessage(SysErrorMessage(GetLastError));
      exit;
    end;
    GetSecurityDescriptorControl(psd,psdc,dwDummy);
    Memo1.Lines.Clear;
    if (psdc and SE_DACL_AUTO_INHERITED) = SE_DACL_AUTO_INHERITED then Memo1.Lines.Add('SE_DACL_AUTO_INHERITED');
    if (psdc and SE_DACL_DEFAULTED)     = SE_DACL_DEFAULTED     then Memo1.Lines.Add('SE_DACL_DEFAULTED');
    if (psdc and SE_DACL_PRESENT)       = SE_DACL_PRESENT       then Memo1.Lines.Add('SE_DACL_PRESENT');
    if (psdc and SE_DACL_PROTECTED)     = SE_DACL_PROTECTED     then Memo1.Lines.Add('SE_DACL_PROTECTED');
    if (psdc and SE_GROUP_DEFAULTED)    = SE_GROUP_DEFAULTED    then Memo1.Lines.Add('SE_GROUP_DEFAULTED');
    if (psdc and SE_OWNER_DEFAULTED)    = SE_OWNER_DEFAULTED    then Memo1.Lines.Add('SE_OWNER_DEFAULTED');
    if (psdc and SE_SACL_AUTO_INHERITED) = SE_SACL_AUTO_INHERITED then Memo1.Lines.Add('SE_SACL_AUTO_INHERITED');
    if (psdc and SE_SACL_DEFAULTED)     = SE_SACL_DEFAULTED     then Memo1.Lines.Add('SE_SACL_DEFAULTED');
    if (psdc and SE_SACL_PRESENT)       = SE_SACL_PRESENT       then Memo1.Lines.Add('SE_SACL_PRESENT');
    if (psdc and SE_SACL_PROTECTED)     = SE_SACL_PROTECTED     then Memo1.Lines.Add('SE_SACL_PROTECTED');
    if (psdc and SE_SELF_RELATIVE)      = SE_SELF_RELATIVE      then Memo1.Lines.Add('SE_SELF_RELATIVE');
  finally
    FreeMem(psd,dwLen);
  end;
end;

oki 18. Aug 2003 07:29

Re: Sicherheitseinstellungen von Dateien ändern
 
Hi Tpercon,

da hat Christian uns doch scho den nächsten Teil geliefert. Probiers mal aus und sag wies weitergehen soll.

Gruß oki

Tpercon 18. Aug 2003 08:19

Re: Sicherheitseinstellungen von Dateien ändern
 
Danke Christian, das geht soweit.

@ Oki: Als nächstes kommt das GetSecurityDescriptorDacl und GetSecurityDescriptorSacl, was aber nicht gerade einfach aussieht.

oki 18. Aug 2003 08:42

Re: Sicherheitseinstellungen von Dateien ändern
 
Hi Tpercon,

die Ergebnisse für DACL und SACL hat uns Christian aber schon geliefert.

Gruß oki

PS: Wo wollten wir eigentlich noch mal hin?

Tpercon 18. Aug 2003 09:41

Re: Sicherheitseinstellungen von Dateien ändern
 
Die Sicherheitseinstellungen für die gewählte Datei so anzeigen, wie sie z.B. im Explorer angezeigt werden (welcher User darf was...).

Christian Seehase 18. Aug 2003 18:43

Re: Sicherheitseinstellungen von Dateien ändern
 
Moin Zusammen,

um SACL erhalten zu können, muss man das Privileg SE_SECURITY_NAME enabled haben, was bei mir unter W2K nicht standardmässig der Fall ist.
Dazu werden dann GetCurrentProcess, OpenProcessToken, LookupPrivilegeValue und AdjustTokenPriviliges benötigt.

oki 19. Aug 2003 07:07

Re: Sicherheitseinstellungen von Dateien ändern
 
Hi,

erstmal Dank an Cristian. Das hilft mächtig weiter. Mit GetCurrentProcess, OpenProcessToken und AdjustTokenPriviliges hab ich schon mal gearbeitet. Ich schau mal gleich meine Quellen durch wie ich das damals gemacht hab.

Gruß oki

Tpercon 19. Aug 2003 07:45

Re: Sicherheitseinstellungen von Dateien ändern
 
Das wäre super!

Tpercon 20. Aug 2003 09:05

Re: Sicherheitseinstellungen von Dateien ändern
 
@ Oki: Hast du vielleicht was gefunden?

Vorallem im Bezug auf
  • GetSecurityDescriptorDacl()
  • GetSecurityDescriptorGroup()
  • GetSecurityDescriptorSacl()

Schönen Tag noch

oki 20. Aug 2003 12:22

Re: Sicherheitseinstellungen von Dateien ändern
 
Hi,

ich hab folgendes ausprobiert, was auch funzt.

Ich weiß nur nicht wo uns das weiterhilft. Leider hab ich die Aufgabenstellung und deren Sinn immer noch nicht verstanden. Deshalb teste ich im Moment nur das aus was du fragst und arbeite nicht an einer zielorientierten Lösung.

Delphi-Quellcode:
 var
  FiName : String;
  psd    : PSECURITY_DESCRIPTOR;
  dwLen  : DWORD;
  psdc   : SECURITY_DESCRIPTOR_CONTROL;
  dwDummy : DWORD;

  lpbDaclPresent : Bool;
  lpbDaclDefaulted : Bool;
  pDacl : PACL;

  lpbSaclPresent  : Bool;
  lpbSaclDefaulted : Bool;
  pSacl           : PACL;
begin
  Result := False;
  // if not OpenDialog1.Execute then exit;
  FiName := Edit1.Text + #0;
  // erforderliche Buffergrösse ermitteln
  dwLen := 0;
  psd  := nil;
  GetFileSecurity(PChar(FiName),OWNER_SECURITY_INFORMATION,psd,0,dwLen);
  // Security Descriptor auslesen
  psd := AllocMem(dwLen);
  try
    if not GetFileSecurity(PChar(OpenDialog1.FileName),OWNER_SECURITY_INFORMATION,psd,dwLen,dwLen) then begin
      ShowMessage(SysErrorMessage(GetLastError));
      exit;
    end;
    GetSecurityDescriptorControl(psd,psdc,dwDummy);
    Memo1.Lines.Clear;
    if (psdc and SE_DACL_AUTO_INHERITED) = SE_DACL_AUTO_INHERITED then Memo1.Lines.Add('SE_DACL_AUTO_INHERITED');
    if (psdc and SE_DACL_DEFAULTED)     = SE_DACL_DEFAULTED     then Memo1.Lines.Add('SE_DACL_DEFAULTED');
    if (psdc and SE_DACL_PRESENT)       = SE_DACL_PRESENT       then Memo1.Lines.Add('SE_DACL_PRESENT');
    if (psdc and SE_DACL_PROTECTED)     = SE_DACL_PROTECTED     then Memo1.Lines.Add('SE_DACL_PROTECTED');
    if (psdc and SE_GROUP_DEFAULTED)    = SE_GROUP_DEFAULTED    then Memo1.Lines.Add('SE_GROUP_DEFAULTED');
    if (psdc and SE_OWNER_DEFAULTED)    = SE_OWNER_DEFAULTED    then Memo1.Lines.Add('SE_OWNER_DEFAULTED');
    if (psdc and SE_SACL_AUTO_INHERITED) = SE_SACL_AUTO_INHERITED then Memo1.Lines.Add('SE_SACL_AUTO_INHERITED');
    if (psdc and SE_SACL_DEFAULTED)     = SE_SACL_DEFAULTED     then Memo1.Lines.Add('SE_SACL_DEFAULTED');
    if (psdc and SE_SACL_PRESENT)       = SE_SACL_PRESENT       then Memo1.Lines.Add('SE_SACL_PRESENT');
    if (psdc and SE_SACL_PROTECTED)     = SE_SACL_PROTECTED     then Memo1.Lines.Add('SE_SACL_PROTECTED');
    if (psdc and SE_SELF_RELATIVE)      = SE_SELF_RELATIVE      then Memo1.Lines.Add('SE_SELF_RELATIVE');

    pDacl := nil;
    GetSecurityDescriptorDacl(psd, lpbDaclPresent, pDacl,   lpbDaclDefaulted);
    IF lpbDaclPresent then begin
      Memo1.lines.add('DACL-ACL-Count: ' + inttostr(pDacl^.AceCount));
      Memo1.lines.add('DACL-ACL-Size: ' + inttostr(pDacl^.AclSize));
    end else begin
      Memo1.Lines.Add('security descriptor does not contain a discretionary ACL for DACL');
    end;

    pSacl := nil;
    GetSecurityDescriptorSacl(psd, lpbSaclPresent, pSacl,   lpbSaclDefaulted);
    IF lpbSaclPresent then begin
      Memo1.lines.add('SACL-ACL-Count: ' + inttostr(pSacl^.AceCount));
      Memo1.lines.add('SACL-ACL-Size: ' + inttostr(pSacl^.AclSize));
    end else begin
      Memo1.Lines.Add('security descriptor does not contain a discretionary ACL for SACL');
    end;

    Result := True;
  finally
    FreeMem(psd,dwLen);
  end;
Gruß oki

Tpercon 20. Aug 2003 12:45

Re: Sicherheitseinstellungen von Dateien ändern
 
Hm, ich bekomme bei jeder Datei security descriptor does not contain a discretionary ACL for DACL bzw. security descriptor does not contain a discretionary ACL for SACL? Das gleiche Problem hatte ich leider auch schon in einer Version von mir.

Man kann für jede Datei die Sicherheitseinstellungen im Explorer ändern. Dies möchte ich durch meine eigene Anwendung ermöglichen. Dafür möchte ich aber erstmal die Infos auslesen, um mich damit vertraut zu machen und alles genau zu verstehen.

oki 20. Aug 2003 12:56

Re: Sicherheitseinstellungen von Dateien ändern
 
wir haben genau den Fall für
Zitat:

lpbSaclPresent

... If this parameter is FALSE, the security descriptor does not contain a system ACL, and the remaining output parameters do not receive valid values.
gleichfalls ist pbSaclDefaulted auf True.

Ich verstehe das so, das im SECURITY_DESCRIPTOR_CONTROL das Flag SE_SACL_DEFAULTED gesetzt ist. Was immer uns das auch sagen soll.

Übrigens hab ich immer noch nicht verstanden wo der Unterschied zwischen DACL und SACL besteht.

Gruß oki

PS: positiv ist auf jeden fall, dass die Methoden funzen. GetSecurityDescriptorGroup hab ich mir gespaart, weil genause.

Tpercon 20. Aug 2003 13:54

Re: Sicherheitseinstellungen von Dateien ändern
 
OK, soweit klar bzw. unklar.
Nur wir bekommen doch eigentlich ein SE_SELF_RELATIVE anstatt SE_SACL_DEFAULTED zurück?!

Eine Frage zu dem GetSecurityDescriptorGroup und der SID. Wie arbeite ich mit derSID und LookUpAccountName / LookUpAccountSID?

Als nächstes wäre also die Arbeit mit den Funktionen GetAce, GetLengthSid, GetAclInformation dran.


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