AGB  ·  Datenschutz  ·  Impressum  







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

WM_COPYDATA 64Bit -> 32Bit

Ein Thema von Gruber_Hans_12345 · begonnen am 4. Nov 2010 · letzter Beitrag vom 9. Nov 2010
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#1

WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 13:27
Ich bin am verzweiflen

Hat irgendwer ein Beispiel wie ich aus einer 64Bit Anwenung (FPC) per WM_COPYDATA zu meiner 32Bit Anwendung Daten schicken kann?
Irgendwei will das nicht und bekomme AV in meiner 32Bit Anwendung wenn ich auf die DAten zugreifen will.

Bin mir auch nicht so sicher, wo ich nun 64Bit Pointer habe und wo nicht, und ob ich in meiner 32Bit Anwenundg was ändern muß oder nicht.

Den es sieht ja so aus als ob die TCopyDataStruct Pointer hat, und diese ja dann 64 bit haben ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 13:42
Bei WM_COPYDATA brauchst du dir erstmal, wegen den Bits bei den Daten, keine Geganken machen.

Denn hier kümmert sich windows um die Speicherverwaltung.

man schickt die Message ab, Windows ließt die übergebenen Daten aus, erstellt in der Zielanwendung eine neue Struktur, kopiert die Daten dort rein und übergibt erst dann alles an die andere Anwendung.

Also sollte es so erstmal egal sein, ob man von 32 Bit auf 64 Bit oder andersrum Daten sendet.
(OK, abgesehn davon, daß in der Zielanwendung nicht genügend Speicher für die zu versendeten Daten zur Verfügung stehen).
$2B or not $2B
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#3

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 13:49
tja, das problem ist, das es leider nicht so funktioniert.

den das hätte ich auch schon gemacht, ich schau mir mal dann den aufruf von FPC an, vielleicht läuft da unter 64 bit noch was schief ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#4

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 14:00
ahhh .nocvh nicht ganz fix, aber sieht so aus als ob im FPC/Lazarus die Struktur falsch definiert ist ... da wird beim dwData ein DWORD verwendet muß aber ein ULONG_PTR verwendet werden
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 14:03
Wo tritt denn die AV auf?

Du könntest dir ja auch erstmal an deine 32-Bit-Anwendung von einer anderen 32-Bit-Anwendung die Daten senden und shcauen ob es da läuft,
sowie die Daten von deiner 64-Bit-Anwendung an eine andere 64-Bit-Testanwendung senden.

Ansonsten bliebe auch noch MMF oder eine Pipe als Alternative.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 14:06
64bit. Hmm? Zufällig Vista oder höher? Wenn ja, könnte es auch sein, daß dir ohnehin die Integrity Levels (MSDN-Library durchsuchenWindows Integrity Mechanism) dazwischenfunken. Schon das Drag&Drop von Dateien auf ein Fenster mit höherem Integrity Level funktioniert meines Wissens nach nicht mehr.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 14:34
Wenn er von 64 auf die 32 Bit die Message sendet und die AV in 32 auftritt, also dem Ziel, dann muß es ja erfolgreich versendet worden sein?

Dieses Integrity Levels-Dingens sollte doch nur auftreten, wenn man Messages zwischen Anwendungen unterschiedlicher Rechte verwenden will?
Also z.B. von einem billigen User-Prozess zu einem mit höheren Adminrechten.
(wie z.B. Drag&Drop-Messages von einem normalen Explorer zu einer Anwendung mit Adminrechten)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 14:44
Wenn er von 64 auf die 32 Bit die Message sendet und die AV in 32 auftritt, also dem Ziel, dann muß es ja erfolgreich versendet worden sein?
... ups

Dieses Integrity Levels-Dingens sollte doch nur auftreten, wenn man Messages zwischen Anwendungen unterschiedlicher Rechte verwenden will?
Die klassischen Rechte haben damit nur bedingt zu tun, wie ich das verstanden habe. Müßte man mal Dezi fragen.

billigen User-Prozess
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 4. Nov 2010, 22:23
Die Ausrichtung (Alignment) der Strukturen ist eine andere. Schau mal, wie groß deine Strukturen in 64 und 32bit sind mit sizeof(). Bei 64bit brauchen solche Strukturen oftmals mehr Speicher als im 32bit Zielprozess allokiert wurde. WM_COPYDATA ist doch DDE?! Die Daten sind doch für den Zielprozess als Readonly zu betrachten, ich glaube daher nicht, dass Windows die Daten irgendwie konvertiert (außer in den Prozess zu kopieren).
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#10

AW: WM_COPYDATA 64Bit -> 32Bit

  Alt 9. Nov 2010, 17:17
Also mittlerweile funkt es, das problem war im FPC bzw Lazarus, wo die TCopyDataStruct falsch definiert war, der Pointer Parameter war als DWORD definiert, und so kam nur müll in der 32Bit Anwendung an.
Gruss Hans

2B or not 2B, that is FF
  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 05:14 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