Ich will Memory Mapped Files für die Kommunikation zwischen einer Service-Anwendung und einem Agent (Client zur Steuerung des Service) verwenden. Dabei setze ich folgenden Code ein, jeweils identisch bei Service und Agent:
Delphi-Quellcode:
procedure CreateMemFile;
begin
MemFile := CreateFileMapping($ffffffff,
nil, PAGE_READWRITE, 0, SizeOf(TSharedData), '
FlexiCom');
if MemFile = 0
then
begin
raise Exception.Create(GetErrTxt(GetLastError));
end;
SharedData := MapViewOfFile(MemFile, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TSharedData));
if SharedData=nil
then
begin
CloseHandle(MemFile);
raise Exception.Create(GetErrTxt(GetLastError));
end;
SharedData^ := '
';
end;
Starte ich zuerst den Service und dann den Agent, so erhalte ich eine Fehlermeldung "Zugriff verweigert" und das Memfile-
Handle ist 0. Wenn ich zuerst den Agent starte und dann erst den Service, so funktioniert alles einwandfrei (auch der Datenaustausch, Lesen und Schreiben etc.).
Leider ist es in der Praxis ja genau umgekehrt - Beim Systemstart wird automatisch der Service gestartet und der Agent wird vom Benutzer bei Bedarf ausgeführt.
Was muss ich tun, damit der Agent die Berechtigung erhält, auf ein vom Service geöffnetes MMF zuzugreifen?