![]() |
Re: Sicherheitseinstellungen von Dateien ändern
Zur Zeit sieht es so aus:
Delphi-Quellcode:
Also fast alles noch von dir. Nur ich bekomme das einfach nicht richtig weiter hin. Zum verzweifeln.
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; [edit=sakura]Doppelpost gelöscht. Mfg, sakura[/edit] |
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:
Mal schaun wie wir so weiterkommen.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; |
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. |
Re: Sicherheitseinstellungen von Dateien ändern
o.k.,
ich hab beim verfolgen von PSECURITY_DESCRIPTOR in der Unit Windows folgende Structur gefunden:
Delphi-Quellcode:
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.
PSecurityDescriptor = ^TSecurityDescriptor;
_SECURITY_DESCRIPTOR = record Revision: Byte; Sbz1: Byte; Control: SECURITY_DESCRIPTOR_CONTROL; Owner: PSID; Group: PSID; Sacl: PACL; Dacl: PACL; end; In der Hilfe für GetFileSecurity finden sich entsprechende Verweise: Zitat:
Gruß oki |
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. |
Re: Sicherheitseinstellungen von Dateien ändern
Ja also, wir kommen so weiter:
in der Hilfe zu GetFileSecurity ist folgendes vermerkt: Zitat:
. 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:
Gruß oki |
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.
|
Re: Sicherheitseinstellungen von Dateien ändern
Hi,
poste mal schnell den aktulen Stand deines Codes. Gruß oki |
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; |
Re: Sicherheitseinstellungen von Dateien ändern
jo,
ich denk so:
Delphi-Quellcode:
probier mal.var PControl : SECURITY_DESCRIPTOR_CONTROL; Revision : DWORD; if (GetSecurityDescriptorControl(PSD, PControl, Revision ) ) and (GetLastError = Error_Success) then begin Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 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 by Thomas Breitkreuz