AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Bidirektionale Names Pipes (wie bei Sockets)?
Thema durchsuchen
Ansicht
Themen-Optionen

Bidirektionale Names Pipes (wie bei Sockets)?

Offene Frage von "Bummi"
Ein Thema von Zacherl · begonnen am 4. Okt 2012 · letzter Beitrag vom 4. Okt 2012
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Bidirektionale Names Pipes (wie bei Sockets)?

  Alt 4. Okt 2012, 16:39
Hallo zusammen,

ich hatte mich vor einiger Zeit schonmal mit Names Pipes beschäftigt und im Grunde nur folgende Demos nach Delphi portiert:
Das funktioniert auch super, allerdings benötige ich etwas anderes. In den gezeigten Beispielen verbindet sich der Client zum Server und sendet ein Request. Der Server schickt dann ein Reply zurück und die Pipe wird danach geschlossen.

Nun möchte ich allerdings eine Funktionalität ähnlich der normalen Windows Sockets simulieren. Sprich: Der Client soll dauerhaft mit dem Server verbunden werden. Der Server muss bei bestimmten Ereignissen eine Art Broadcast Nachricht an alle verbundenen Clients schicken. Hierbei wäre es mir wichtig, dass der Client mit irgendeiner blocking Funktion auf neue eingehende Daten in der Pipe warten kann, damit er nicht permanent pullen muss.

Meine Frage: Ist sowas mit den Named Pipes überhaupt möglich? Und wenn ja: Hat jemand ein gutes Beispiel?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Bidirektionale Names Pipes (wie bei Sockets)?

  Alt 4. Okt 2012, 17:02
ich habe dies hier
Code:
unit Pipes;

// This is a wonderful set of components for inter-process communication
// using Named Pipes. One of the best solutions when you need to communicate
// with an NT/2000/XP service, and/or communicate across an MS Windows network.
//
// Free Source Code, no license, no guarantee, no liability.
//
// The original author, Russell, gave this to me with no usage restrictions
// whatsoever.
//
// This package prepared by Tobias Giesen, tobias@tgtools.de
//
// March 2004
//
// Security added by Thomas Wassermann 20110228
// Filename may point to a File whose accessright will be used for Clientconnections
//

in angefummlter Form
Securityattributes InitializeSecurity(FSA); FKillEv:=CreateEvent(@FSA,...

im Einsatz, das Original gab es meine ich irgendwo bei Emba zum runterladen.

Verbindung offen lassen und jeder Zeit in beide Richtungen lesen/schreiben..
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Bidirektionale Names Pipes (wie bei Sockets)?

  Alt 4. Okt 2012, 17:17
Hallo Thomas,

das sieht schonmal sehr interessant aus Wenn das ohne Probleme zwischen Services / elevated / non elevated Prozessen funktioniert, ist das genau das, was ich suche.

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Bidirektionale Names Pipes (wie bei Sockets)?

  Alt 4. Okt 2012, 17:26
Ich habe es im Netz im Einsatz mit 3 Schichten
1. direkt an der Maschine als Dienst
2. Middle-tier für die Protokllierung / Aufbereitung / Steerung als Dienst
3. GUI für die Adrstellung

zwischen 1 und 2 hängt eine Zugriffsberechtigung auf Dateiebene hängt ...

Delphi-Quellcode:
procedure TPipeServer.GenACLFromFile;
//20110228 by Thomas Wassermann
var
  res : Boolean;
  len : Cardinal;
  fDaclPresent,fDaclDefaulted:Bool;
begin
  FACL := nil;
  if Assigned(FpFileSD) then DoHeapFree(FpFileSD);
  if FileExists(FACLFileName) then
    begin
    res := GetFileSecurity(PChar(FACLFileName),DACL_SECURITY_INFORMATION,FpFileSD,0,len);
    if res or (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then
       begin
         FpFileSD := DoHeapAlloc(len);
         GetFileSecurity(PChar(FACLFileName),DACL_SECURITY_INFORMATION,FpFileSD,len,len);
         GetSecurityDescriptorDacl(FpFileSD,fDaclPresent,FACL,fDaclDefaulted);
       end;
    end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Bidirektionale Names Pipes (wie bei Sockets)?

  Alt 4. Okt 2012, 22:09
Hallo Thomas,

ich bin in dem Gebiet ACLs und so weiter nicht sonderlich fit, deshalb kann ich den Sinn bzw. Anwendungszeck deines Codeschnipsels leider grade nicht ganz nachvollziehen. So wie ich das sehe benutzt du eine Datei, um die SDs zu extrahieren und dann für die Pipe zu übenehmen, oder?

Mit dem Null Descriptor bin ich normalerweise immer ganz gut gefahren. Für Named Events zwischen Service und Desktop App habe ich das immer ohne Probleme verwendet. Bei den Event Namen konnte (musste) man allerdings noch das Prefix "Global\" dem eigentlichen Namen vorwegstellen, damit es auch wirlich funktioniert hat. Sowas scheint bei den Pipes leider nicht möglich zu sein.

Zwischen elevated und nicht elevated Anwendung funktionieren die Pipe Komponenten wunderbar, aber bisher habe ich es noch nicht hinbekommen, dass meine Desktop Anwendung (egal ob elevated oder nicht) mit dem Service kommunizieren kann.

Hast du da eventuell noch einen Tipp für mich?

Edit: Verdammt, das kommt davon, wenn man versucht mit Kopfschmerzen zu arbeiten. Hatte vergessen den Server in meinem Test Service auf Active zu setzen Jetzt funktioniert auch alles wie gewünscht. Danke nochmal

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 4. Okt 2012 um 22:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Bidirektionale Names Pipes (wie bei Sockets)?

  Alt 4. Okt 2012, 23:36
Local bzw. Gloabl im Zusammenhang mit Named Pipes kenne ich nicht.
Die Idee hinter der File-ACL ist es dem Kunden die Möglichkeit zu geben die Zugriffe auf die Server auf einfache Weise sperren/freigeben zu können.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:42 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