Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: _STARTUPINFO.lpReserved2 [Transfer Data to a new process]

  Alt 19. Nov 2014, 11:15
Dein Code dient also dazu so erstmal nur dazu, einen "geheimen" Parameter zu übergeben, um den Start der Anwendung zu autorisieren?



Erste "Kritik": Verwende doch für Delphi-Codes bitte die [DELPHI]-Tags, anstatt der [CODE]-Tags.

Wenn per CopyMemory eh alles überschrieben wird, dann kann man sich das ZeroMemory davor auch sparen.

Da du danach den Buffer einfach so blind nach PWideChar casterst, dann solltes du den Buffer besser 2 Byte größer machen und das Ende immer mit #0 füllen.
Es knallt sonst eventuell, wenn in dem Buffer kein #0 vorkommt und das Lesen/Charkonvertieren dann unkontrolliert weitergeht.

Wenn du eh schon weißt, daß es eh immer nur maximal 64 KB werden können und das nicht wirklich viel ist (bei 2 GB oder mehr), könnte man die dynamischen Speicherreservierungen weglassen und einfach mit einem 64 KB + 2 Byte großem statischem Array arbeiten. (ist nicht schlimm, aber vereinfacht/verkürzt den Code etwas)

Oder du verwendest direkt ein WideChar-Array, anstatt des Byte-Array. Man kann im Debugger auch leichter nachgucken was drin steht und man spart sich die wilden Casts.
Delphi hat einen Automatismus für statische Char-Arrays (bei 0 beginnend) welche sich automatisch/implizit nach String casten, beim Auslesen/Vergleichen mit einem anderen String.




Und nun noch ein paar andere Varianten für Inter-process communication, welche mit dem CL-Beitrag nichts zu tun haben:
* Named MMF (memory mapped files)
* Named Pipes
Entweder mit einem "globalen" Namen oder der Name via Parameter übergeben.
http://msdn.microsoft.com/en-us/libr.../aa365574.aspx
http://de.wikipedia.org/wiki/Interprozesskommunikation
http://en.wikipedia.org/wiki/Inter-p..._communication

Man könnte auch mit aktuellen Laufzeitdaten (Uhrzeit auf ein paar Sekunden genau) und sonstige veränderliche und von beiden Programmen bekannte Parameter benutzen, um verschlüsselt+gehasht via Parameter ein Startpasswort zu übergeben. (egal ob das jemand sieht, denn es ist ja gleich wieder ungültig)
Eventuell auch kombiniert, indem man auch noch nachsieht, ob gleichzeitig einfach nur eine bestimmte NamedPipe/NamedMMF existiert oder eine bestimmte Datei in Temp liegt.
$2B or not $2B

Geändert von himitsu (19. Nov 2014 um 11:26 Uhr)
  Mit Zitat antworten Zitat