AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Sicherheitseinstellungen von Dateien ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Sicherheitseinstellungen von Dateien ändern

Ein Thema von Tpercon · begonnen am 12. Aug 2003 · letzter Beitrag vom 29. Sep 2007
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#11

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 13. Aug 2003, 13:37
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]
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 10:18
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.
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#13

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 10:32
Mit dem GetSecurityInfo hast du natürlich Recht.

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

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 12:39
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
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#15

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 14:22
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.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 14:38
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
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#17

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 14:45
Hm, nur ich scheitere ja gerade an der Verwendung von GetSecurityDescriptorControl und der SECURITY_DESCRIPTOR_CONTROL Struktur. Daher komm ich ja nicht weiter.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 14:52
Hi,
poste mal schnell den aktulen Stand deines Codes.

Gruß oki
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#19

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 15:10
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;
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Sicherheitseinstellungen von Dateien ändern

  Alt 14. Aug 2003, 15:43
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.
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