Entwickler-Ecke

Dateizugriff - TSecurityAttributes für Named Pipes


bummi - Sa 26.02.11 23:58
Titel: TSecurityAttributes für Named Pipes
Ich bräuchte eine schlanke einfach Implemtierung für das Setzen der TSecurityAttributes für Named Pipes.
Vorzugsweise ohne den Jwa Overhead.
Gibt es eine einfach Möglichkeit per CreateWellKnownSid o.ä. dort hin zu kommen?

CROSSPOST:
http://www.delphipraxis.net/158668-tsecurityattributes-fuer-named-pipes.html#post1084527


jaenicke - So 27.02.11 12:12

Im einfachsten Fall sieht das so ca. aus:
http://www.delphipraxis.net/267009-post9.html
Wenn du mehr machen möchtest, ist die Frage: Was? ;-)


bummi - So 27.02.11 13:17

@jaenicke

merci, so ähnlich sieht es derzeit bei mir aus.
Ich werde 2 Dienstarten haben.
1.) Anbindung von SBS (a. Twincat oder b. S7 c. wird man gegf. sehen) Aufbereitung der Maschinendaten die Daten sollen dann von einem zweiten Hauptdienst über eine einheitliche (XML-) Schnittstelle bereitgestellt werden.
2.) Entgültige Aufbereitung/Validierung der Daten, schreiben von von diversen Daten (QA, Protokoll etc.) Freigabe des nächsten Maschinenzyklus, Schnittstelle für eine GUI.

Sicherheitstechnisch sollen die Dienste miteinander kommunizieren dürfen nicht jeder Benutzer am Rechner oder im Netz.
Mit dem zweiten Dienst sollen bestimmte Domänengruppen kommunizieren dürfen.

Gibt es eine Möglichkeit SID's aus einer Freigabe einer Datei zu ziehen und diese zu verwenden, quasi eine ini aus dem SID ?


bummi - Mo 28.02.11 15:47

So, ich habe es jetz doch selbst gelöst...falls jemand mal ein ähnliches Problem hat...
es kann der Komponetente eine Templatedatei mit den gewünschten Zugriffsrechten zugewiesen werden.
Die entscheidenenen Codeabschnitte:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
private
     FACL: PACL;
     FACLFileName:  String;
     FpFileSD:      PSecurityDescriptor;





procedure TPipeServer.GenACLFromFile;
//20110228 by Thomas Wassermann
var
  res : Boolean;
  len : Cardinal;
  fDaclPresent,fDaclDefaulted:Bool;
begin
  FACL := nil;
  if Assigned(FpFileSD) then  DoHeapFree(FpFileSD);
  if FileExists(FACLFileName) then
    begin
    res := GetFileSecurity(PChar(FACLFileName),DACL_SECURITY_INFORMATION,FpFileSD,0,len);
    if res or (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then
       begin
         FpFileSD := DoHeapalloc(len);
         GetFileSecurity(PChar(FACLFileName),DACL_SECURITY_INFORMATION,FpFileSD,len,len);
         GetSecurityDescriptorDacl(FpFileSD,fDaclPresent,FACL,fDaclDefaulted);
       end;
    end;
end;