AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mailslots ?

Ein Thema von Captnemo · begonnen am 8. Mai 2003 · letzter Beitrag vom 16. Sep 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

Mailslots ?

  Alt 8. Mai 2003, 12:18
Hallo Leute

ich schreib grad ein Prog, welchse aus einem Dienst und einer Anwendung besteht. Da ich zwischen beiden Daten austauschen muß, will ich mit Mailslots die Daten in Form von Strings übergeben.

Gesagt - getan

Nun bin aber auf ein Problem gestossen, welches ich mir nicht erklähren kann.

Wenn der Dienst und das Anwendungsprogramm (WinXP) unter dem gleichen Benutzerkonto laufen, klappt alles wie erwartet.

Wenn aber der Dienst unter dem Systemkonto läuft, und das Anwendungsprogramm unter einem Benutzerkonto, dan können zwar beide mit CreateMailSlot einen MailSlot eröffnen, aber mit CreateFile nicht auf den jeweils anderen zugreifen.
Ich vermute das Sie nicht das Recht haben, auf den jeweils anderen Mailslot zuzugreifen. Weiss ich aber nicht.

Vielleicht befindet sich hier ja ein MailSlot-Guru, der mir weiter helfen kann.

bis denn
Captnemo
Dieter
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 8. Mai 2003, 12:49
Ich arbeite viel mit Pipes, welche sich an dieser Stelle genau gleich verhalten. Ja, Du musst ein wenig mit den Security Attributen "rumspielen". Dazu musst Du nur ein paar Zeilen am Server einfügen.

Delphi-Quellcode:
// der Server
var
  FSA: SECURITY_ATTRIBUTES;
  FSD: SECURITY_DESCRIPTOR;
...
  InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION);
  SetSecurityDescriptorDacl(@FSD, True, nil, False);
  FSA.lpSecurityDescriptor := @FSD;
  FSA.nLength := sizeof(SECURITY_ATTRIBUTES);
  FSA.bInheritHandle := True;
// gleiches halt nur mit der Server-Pipe, der letzte Parameter bestimmt das Security Level
  Pipe := CreateNamedPipe(
    PChar(FFullPipeName), PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE or
    PIPE_READMODE_MESSAGE or PIPE_WAIT or SECURITY_ANONYMOUS,
    PIPE_UNLIMITED_INSTANCES, cMaxMessageDataSize + 1024,
    cMaxMessageDataSize + 1024, NMPWAIT_USE_DEFAULT_WAIT, @FSA
  );
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#3
  Alt 8. Mai 2003, 13:07
Prima Endlich mal eine brauchbar Antwort. Danke.

Ich werd mal ein bischen rumprobieren.

Ich würd ja gerne bei Mailslots bleiben, da ich mich mit den Pipes noch nie beschäftigt haben. Geht das mit den Security Attributes auch bei Mailslots ?

Oder kennst du ein gutes Tutorial oder ein kleinen Source der mit das mit den Pipes verständlich vermitteln kann?

Dieter
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4
  Alt 8. Mai 2003, 13:12
Mailslots und Pipes sind eigentlich identisch, von daher sollte es funktionieren. Der letzte Parameter nimmt den Pointer auf FSA.

Code:
HANDLE CreateMailslot(
  LPCTSTR lpName,
  DWORD nMaxMessageSize,
  DWORD lReadTimeout,
  [color=#ff0044]LPSECURITY_ATTRIBUTES lpSecurityAttributes[/color]
);
Gegenüber Mailslots kann man mit Named Pipes in beide Richtungen kommunizieren. Die Nutzung ist fast identisch. Ein weiterer Vorteil von Pipes ist, dass man sich sicher sein kann, das die Nachricht auch wirklich übermittelt wird, dafür ist der Overhead (CPU- und Netzwerkbelastung) etwas höher.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5
  Alt 8. Mai 2003, 21:40
Habs jetzt probiert. Und es hat soweit geklappt.
Danke nochmal.

Jetzt wird bei CreateFile kein Fehler mehr produziert. Ich kann auch eine Nachricht von der Anwendung an den Dienst schicken, aber vom Dienst an die Anwendung klappt noch nicht, obwohl Windows beim CreateFile keinen Fehler meldet ? Weiß noch nicht warum.

Hast du dazu auch noch eine Idee?
Dieter
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 8. Mai 2003, 22:38
So auf Anhieb nicht. Wenn Du alles gleich machst, nur halt anders herum, dann sollte es eigentlich gehen. Du musst halt auch die Security Attribute runterschrauben. Ansonsten versuche es mal mit Pipes. Ist eigentlich vom Handling indentisch, dafür aber two-way. Erinnere mich mal morgen, dann sende ich meine Komponenten hier rein. Die sind aber im Büro und ich gerade nicht

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#7
  Alt 9. Mai 2003, 08:40
Hallo Sakura

Ich sollte dich erinnern Gell
Dieter
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#8
  Alt 9. Mai 2003, 08:56
Hi Sakura, ich bins nochmal,

ich hab jetzt mal ein bischen rumexperimentiert, und dabei folgendes Festgestellt:

Ich kann deinen Code zwar fehlerfrei abtippen, aber verstanden habe ich Ihn nicht
Wenn ich jetzt z.B. mit SetSecurityDesriptorSACL versucht die Sicherheitsattribute für das System zu setzen, kann der Mailslot nicht mehr erzeugt werden.
Wahrscheinlich habe ich dafür von der Geschichte zu wenig Ahnung. Die W32-Hilfe ist da aber auch nicht wirklich ein Hilfe, weil wenn man nicht den richtigen Einstig hat, dann ist das wenig verständlich geschrieben. Zumal auch die Auswirkungen, die einige Parameter haben, bzw. was wie kombiniert werden kann, in der W32-Hilfe meiner Meinung nach nicht ausreichend erläutert ist.

Gibts da nicht irgendwo was besserers? Wo hast du denn deine Kenntnisse her ?
Dieter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9
  Alt 9. Mai 2003, 09:01
www.msdn.microsoft.com oder das PSDK downloaden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#10
  Alt 9. Mai 2003, 11:36
Hi Captnemo,

so tief stecke ich in der Materie auch nicht mehr drinne. Letztendlich habe ich das damals wohl aus dem MSDN (siehe Luckies Post) zusammengekratzt. Auf Anhieb kann ich es auch nicht erklären - die Materie ist einfach zu viel schichtig. Anbei die Komponenten. Sind nie ganz fertig geworden, funktionieren aber und haben eine rudimentäre Hilfe dabei.

......
Angehängte Dateien
Dateityp: zip pipe_messages.zip (25,9 KB, 689x aufgerufen)
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 19: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