AGB  ·  Datenschutz  ·  Impressum  







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

Wie sicher ist wm_copydata

Ein Thema von norwegen60 · begonnen am 18. Mai 2022 · letzter Beitrag vom 23. Mai 2022
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#1

AW: Wie sicher ist wm_copydata

  Alt 19. Mai 2022, 12:28
Es geht mir nicht darum, dass unberechtigte die Daten lesen. Es sind reine Messwerte und sie sind unkritisch.
Ich muss aber sicherstellen, dass sie auch immer ankommen.
Um sie eindeutig zuornen zu können, habe ich dem Fensternamen eine 5stellige Nummer angehängt und die wird auch mit CopyDataStruct.dwData übergeben.
Es sollte also ziemlich sicher sein, dass ich nur Messdaten auswerte die für das Fenster bestimmt sind.

Und wozu das Ganze:
Es gibt eine Hauptanwendung, die normalerweise mit einem Messgerät verbunden ist.
Jetzt kann es aber sein, dass eine Hilfsanwendung auch mit demselben Messgerät kommunizieren muss.
  1. Wenn die Hauptanwendung gestartet wird und die Hilfsanwendung schon mit dem Messgerät verbunden ist, breche ich den Start ab und sage das die Hilfsanwendung erst beendet werden muss.
  2. Wenn die Hilfsanwendung gestartet wird und die Hauptanwendung schon mit dem Messgerät verbunden ist, kommuniziere ich über die Messages mit der Hauptanwendung. Wenn zulässig gibt die die Befehle ans Messgerät weiter und wieder zurück.
  3. Wenn nur die Hilfsanwendung gestartet wird, verbindet die sich direkt mit dem Messgerät.
Da die Hauptanwendung incl. Kommunikation per (mehrerer DLL's) zum Messgerät schon lange existiert, wollte ich den Eingriff dort so klein wie möglich halten.
Die komplette Werteübergabe erfolgt schon seit Jahrzehnten per Strings.

Und es sieht gut aus. Erste Tests laufen bisher problemlos.

In einer anderen Anwendung arbeite ich seit Jahren mit CreateNamedPipe und ConnectNamedPipe. Da kam es aber immer wieder vor, dass ich bei Windows-Versions-Wechseln was anpassen musste. Auch gibt es hin und wieder aufhänger die ich bisher nicht nachvollziehen konnte. Von daher wollte ich das hier vemeiden.

Geändert von norwegen60 (19. Mai 2022 um 12:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.318 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie sicher ist wm_copydata

  Alt 19. Mai 2022, 12:34
Bei PostMessage ist es schwerer zu erkennen, aber SendMessage sagt dir ja, ob es angekommen/verarbeitet wurde.
(nja, ob das Programm intern die Message verwirft, das bekommst nur mit, wenn dort dann auch ein entsprechender Result-Wert gesetzt wird)

Es muß nur jemand die Rückgabe(n) auswerten, also das was im MSDN unter "Return value" und "Remarks" erwähnt wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: Wie sicher ist wm_copydata

  Alt 20. Mai 2022, 10:59
Zitat:
Um sie eindeutig zuornen zu können
Ob du diese eindeutig zuornen kannst weiß ich nicht
Aber wenn du diese eindeutig zuordnen willst würde ich eine Konstante in Erwägung ziehen dieser einen aussagekräftigen Namen verpassen
damit du auch in 10 Jahren noch weist wofür diese steht.

WM_COPYDATA ist sicher hatte noch nie irgendwelche Probleme diesbezüglich.
Der Vorteil zudem ist das man unabhängig ist und sogar zwischen 32 und 64Bit Anwendungen kommunizieren kann.

Geändert von venice2 (20. Mai 2022 um 12:21 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.865 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie sicher ist wm_copydata

  Alt 22. Mai 2022, 15:18
Bei PostMessage ist es schwerer zu erkennen, aber SendMessage sagt dir ja, ob es angekommen/verarbeitet wurde.
(nja, ob das Programm intern die Message verwirft, das bekommst nur mit, wenn dort dann auch ein entsprechender Result-Wert gesetzt wird)

Es muß nur jemand die Rückgabe(n) auswerten, also das was im MSDN unter "Return value" und "Remarks" erwähnt wird.
Nur: SendMessage wartet, bis der Empfänger die Botschaft verarbeitet hat.
Falls das empfangende Programm aber irgendwie in eine Endlosschleife geraten sein sollte
wäre dann auch der Sender blockiert, was vermutlich nicht gewünscht wäre...
Es gibt halt selten Vorteile ohne Nachteile.
Man könnte natürlich auch noch eine Verbindung in die gegenrichtugn aufbauen über die bestätigungsmeldungen gesendet werden
und jedem Datenpaket eine eindeutige ID geben... Das könnte man dann Asynchron aufbauen.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.318 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie sicher ist wm_copydata

  Alt 22. Mai 2022, 19:08
Du hast ja die Qual der Wahl, wobei nur EINWAS ewig wartet (außer es läuft im selben Thread, wie das Ziel).

PostMessage
PostThreadMessage

SendMessage
SendMessageTimeout
SendMessageCallback **
SendNotifyMessage

Und neben WM_COPYDATA gibt es auch noch Anderes, um Daten zu übergeben.
WM_SETTEXT/SendTextMessage und drüben in einem unsichtbaren Windows auf WM_SETTEXT reagieren. (nur die #0000 darf da nicht vorkommen, aber dafür gibt es ja Lösungen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mai 2022 um 19:10 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.865 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie sicher ist wm_copydata

  Alt 22. Mai 2022, 19:41
Ah, danke für die neueren Sendmessage Varianten, die kannte ich noch nicht!
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
678 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wie sicher ist wm_copydata

  Alt 23. Mai 2022, 10:23
Nur: SendMessage wartet, bis der Empfänger die Botschaft verarbeitet hat.
Falls das empfangende Programm aber irgendwie in eine Endlosschleife geraten sein sollte
wäre dann auch der Sender blockiert, was vermutlich nicht gewünscht wäre...
Deshalb sollte man auch SendMessageTimeout verwenden wenn der Addressat in einem anderen Prozess lebt...
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.318 Beiträge
 
Delphi 12 Athens
 
#8

AW: Wie sicher ist wm_copydata

  Alt 23. Mai 2022, 11:32
Oder SendMessageCallback, falls man das Ergebnis braucht, aber nicht warten möchte,
oder SendNotifyMessage, was so ähnlich wie PostMessage nicht auf die Ausführung wartet.

Beim SendNotifyMessage weiß ich jetzt aber nicht, ob es nur auf das Ende nicht wartet, aber vielleicht darauf, ob die Verarbeitung anfängt.
Das wäre von Interesse, falls schon vorher eine andere Message dort hängt.
Im Delphi z.B. der Fall, wenn eine Exception in einer vorherrigen Message auftrag, wo jene Message erst beendet wird, wenn jemand den Fehlerdialog schießt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Mai 2022 um 11:35 Uhr)
  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 21:49 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