Autor Beitrag
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Do 29.01.04 12:06 
Hi Leute,

Ich versuche gerade ein Objekt zu sichern. Dazu wollte ich diesem eine neue Zugriffskontolliste (DACL) zuweisen, die testmäßig nur einem bestimmten User den Zugriff gestatten sollte. Als test Objekt hab ich ein Pipe-Objekt, bei dem der Client einen text an den Server sendet (was auch funktioniert). Leider funktioniert es nicht, sobald ich die DACL manipuliere, und wo mein Fehler ist, ist mir auch nicht klar. Hoffe da kann mir jemand helfen.

SecurityDescriptor - Manipulation:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Success := InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION);

If Success Then
 if GetAccountSid( '' { GetPCName }'UserName' { GetCurrentUserName }, UID) then
  begin
   sACL := (2 * SizeOf(ACCESS_ALLOWED_ACE)) + (2 * GetLengthSid(UID)) - (2 * SizeOf(DWORD));
   pNewAcl := HeapAlloc(GetProcessHeap, HEAP_ZERO_MEMORY, sACL);
   if pNewAcl <> NIL then
    if InitializeAcl(pNewAcl^, sACL, ACL_REVISION) then
        if AddAccessAllowedAce(pNewAcl^, ACL_REVISION, GENERIC_ALL, UID) then 
        if not SetSecurityDescriptorDacl(psd, TRUE, pNewAcl, FALSE) then Exit;
    end;
 end   
  else 
   Success := SetSecurityDescriptorDacl(pSD, TRUE, NIL, FALSE);

 sa.nLength := sizeof(sa);
 sa.lpSecurityDescriptor := pSD;
 sa.bInheritHandle := FALSE;

 if pNewAcl <> nil then HeapFree(GetProcessHeap, 0, pNewAcl);


[Nachtrag: 16.02.2004]

Also es scheint zu funktionieren.
Allerdings scheint der Objekt-Owner trotz eines,
ihn betreffenden AccessDeniedEntry, zugriff
auf das Objekt zu haben.

kleine Korrektur:

ausblenden Delphi-Quelltext
1:
2:
// nACL = Anzahl der Einträge
sACL := SizeOf(ACL) + (nACL * SizeOf(ACCESS_ALLOWED_ACE)) + (nACL * GetLengthSid(UID)) - (nACL * SizeOf(DWORD));

_________________
mfg
Tana´Ri