Autor Beitrag
tgt
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 04.11.03 13:12 
Hallo,

Ich hab folgendes Problem:

Ich habe ein Service und eine GUI. Die beiden Applikationen verständigen sich über FileMapping um Daten auszutauschen. Dabei werden die Lese und Schreibe Operationen durch Windows-"Events" ausgelößt.

Nun zum Problem:

Der Service läuft Standardgemäß unter dem User SYSTEM, wobei die GUI im Kontext des aktuellen Users läuft. Jedesmal wenn einer der Anwendungen versucht mit dem anderen zu kommunizieren und dabei die Events auslößt gibt es eine "Access denied (Zugriff verweigert)" Fehlerrückgabe.

Sobald der Service im Debug Modus (also in der Konsole) läuft, funktioniert alles perfekt (ist ja auch klar, läuft im selben Sicherheitskontext wie die GUI).

Folgendermaßen sind die Events augebaut:
Source:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
In der GUI: 
const 
   MMF_SERVEREVENT = 'Global\spsevent'
   MMF_CLIENTEVENT = 'Global\spcevent'

hCEvent := CreateEvent(nil, False, False, MMF_SERVEREVENT); 
hSEvent := OpenEvent(SYNCHRONIZE, False, MMF_CLIENTEVENT); 

Im Service (ist in C geschrieben): 

hSEvent = OpenEvent(SYNCHRONIZE, FALSE, MMF_SERVEREVENT); 
hCEVent = CreateEvent(NULL, FALSE, FALSE, MMF_CLIENTEVENT);


Das Problem ist wohl, das der Service, bzw die GUI, keine Rechte hat, mit dem Gegenüber zu kommunizieren. Hat jemand eine Ahnung wie ich die Rechte für diese setzen kann ?

Source:
ausblenden Delphi-Quelltext
1:
CreateEvent(pSecurityAttr,... )					



Die GUI soll unter jedem User mit dem Service kommunizieren. Egal welche Rechte dieser hat.

Gruss,

Andi

Moderiert von user profile iconTino: Werbelink entfernt.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 04.11.03 16:13 
Der Service muss die DACL seiner Events entsprechend anpassen...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
tgt Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 04.11.03 16:22 
Ja habs schon geschafft.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); 

if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)) {
 winerr("start: InitializeSecurityDescriptor");
 pSD = NULL;
}
 
 else if (!SetSecurityDescriptorDacl(pSD, TRUE, NULL, FALSE))
{
 winerr("start: SetSecurityDescriptorDacl");
 pSD = NULL;
}


und es funktioniert. Danke.