AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateMemFile und Service-Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

CreateMemFile und Service-Anwendung

Ein Thema von Union · begonnen am 23. Mär 2005 · letzter Beitrag vom 14. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#1

CreateMemFile und Service-Anwendung

  Alt 23. Mär 2005, 12:52
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?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: CreateMemFile und Service-Anwendung

  Alt 23. Mär 2005, 13:07
Zitat von Union:
Was muss ich tun, damit der Agent die Berechtigung erhält, auf ein vom Service geöffnetes MMF zuzugreifen?
Eine Sicherheitsbeschriebung für das MMF-Objekt bei dessen Erzeugung angeben.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: CreateMemFile und Service-Anwendung

  Alt 23. Mär 2005, 13:12
Zitat von NicoDE:
Zitat von Union:
Was muss ich tun, damit der Agent die Berechtigung erhält, auf ein vom Service geöffnetes MMF zuzugreifen?
Eine Sicherheitsbeschriebung für das MMF-Objekt bei dessen Erzeugung angeben.
Und wie mache ich das genau? Wahrscheinlich brauche ich dafür einen TSecurityDescriptor als 2. Parameter. Aber wie erstelle ich den (aus der Beschreibung im WinApi-Helpfile werde ich nicht schlau).
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: CreateMemFile und Service-Anwendung

  Alt 23. Mär 2005, 13:22
Zitat von Union:
Und wie mache ich das genau?
Ich habe anno dazumal im Entwickler-Forum ein Beispiel aus dem Platform SDK übersetzt: RegKeyWithFullAccess.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

CreateMemFile und Service-Anwendung [gelöst]

  Alt 23. Mär 2005, 23:38
Zitat von NicoDE:
Zitat von Union:
Und wie mache ich das genau?
Ich habe anno dazumal im Entwickler-Forum ein Beispiel aus dem Platform SDK übersetzt: RegKeyWithFullAccess.
Ich habe es jetzt beim Erzeugen des MMF innerhalb der Service-Anwendung so gelöst:
Delphi-Quellcode:
procedure CreateMemFile;
var
   aSA : TSecurityAttributes;
   aSD : TSecurityDescriptor;
begin
   aSA.nLength := SizeOf(TSecurityAttributes);
   aSA.bInheritHandle := true;
   aSa.lpSecurityDescriptor := @aSd;
   
   InitializeSecurityDescriptor(aSa.lpSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION);
   // Das ist die massgebliche Zeile, und hier der Parameter nil:
   // If this parameter is NULL, a NULL discretionary ACL is assigned to the security descriptor, allowing all access to
   // the object. The discretionary ACL is referenced by, not copied into, the security descriptor.
   SetSecurityDescriptorDacl(aSa.lpSecurityDescriptor, True, nil, False);

   MemFile := CreateFileMapping($ffffffff, @aSa, 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;
Dadurch wird laut WinApi-Doku Vollzugriff für alle erteilt. Das ist in dem fall auch nicht weiter schlimm, da sich an dem Server, auf dem der Service läuft, eh nur admins anmelden dürfen.

Danke für die Hilfe!
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: CreateMemFile und Service-Anwendung [gelöst]

  Alt 24. Mär 2005, 09:33
Zitat von Union:
Dadurch wird laut WinApi-Doku Vollzugriff für alle erteilt.
Das ist korrekt, der so genannte NULL-DACL gibt allen Vollzugriff (wird zwar nicht empfohlen, aber ist die einfachste Art das Problem zu lösen).
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#7

Re: CreateMemFile und Service-Anwendung

  Alt 2. Nov 2006, 09:54
Wollte mal fragen ob du mal den Code Posten kannst ? Will auch sowas machen eben.
Programmieren ..... .
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: CreateMemFile und Service-Anwendung

  Alt 2. Nov 2006, 10:51
Der Code ist doch da...
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#9

Re: CreateMemFile und Service-Anwendung

  Alt 2. Nov 2006, 14:08
Ich wollte das ganze mal im zusammenhang sehen beispiel Programme eben. Weil ich weiß nicht wie der Dienst drauf reagiert wenn du einen Stream sickst ?
Programmieren ..... .
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#10

Re: CreateMemFile und Service-Anwendung

  Alt 14. Mär 2007, 16:51
Noch ne Frage wann bekommst du mit das in den Speicher geschireben wird ? Und zeig mir das Bsp. mal zusammen ! Und machst du irgendt wo auch OpenFileMapping() ?
Programmieren ..... .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz