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.