Hallo,
Ich habe schon lang nicht mer mit der Windows API gearbeitet. Aber nichts desto trotz benötige ich einige hilfestellung für folgendes Problem.
Ich suche einen Weg wie ich Daten Blöcke mit hilfe der API von einem Virtuellen Adressraum zum anderen kopiren kann.
Der sinn dahinter ist. Das 2 Processe untereinander Daten austausch. Das ist in einem Multi Core / Multi Process System durch die Virtuelle Speicherverwaltung mit den standart API Funktionen nicht möglich.
Ich stelle mir vor das die Funktion so aussehen müste.
DMACopy(ProcessID1,Adresse,Länge,ProcessID2,Adresse)
Ich habe aber etwas vergleichbares bisher nicht gefunden. Im Moment mache ich das Kopiren über UDP. Das ist aber eigentlich zu langsam. Ausserdem sind die Möglichkeiten beschrängt.
Das Clipboard habe ich auch schon bemüht, sowie eine RamDisk. Aber das hilft alles nicht wirklich. Ich brauche erheblich mer Pervormance.
Fileicht gibt es ja Funktionen die einen solchen Datentransfher ermöglichen.
Danke TFT
DMA Copy ?
- tft
- Beiträge: 650
- Registriert: 08.09.2004 20:18
- Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
- Wohnort: Dachsen
- Kontaktdaten:
DMA Copy ?
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung
PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung
PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler

Re: DMA Copy ?
Doch ist es. Musst halt 2 API-Funktionen verwenden: ReadProcessMemory und WriteProcessMemory für weitere Infos die MSDN befragen.tft hat geschrieben: Der sinn dahinter ist. Das 2 Processe untereinander Daten austausch. Das ist in einem Multi Core / Multi Process System durch die Virtuelle Speicherverwaltung mit den standart API Funktionen nicht möglich.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

- tft
- Beiträge: 650
- Registriert: 08.09.2004 20:18
- Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
- Wohnort: Dachsen
- Kontaktdaten:
Hallo..
ReadProcessMemory scheint der richtige weg zu sein. Allerdings habe ich jetzt das problem an eine Gültige PID zu kommen.
Mit WH=FindWindow("","Name") hole ich den Handler des Fensters.
Mit PID=GetWindowThreadProcessID(WH,0) hole ich die Process ID
Mit PIDH=OpenProcess(($1F0FFF,0,PID) sollte ich eigentlich den Process öffnen können. Aber da kommt immer nur 0 bei raus.
Ich denke ich mache da etwas grundlegend falsch. Möchte noch anmerken das ich das nicht in PB machen möchte. Im prinzip solte es ja mit der API immer funktionieren.
ReadProcessMemory scheint der richtige weg zu sein. Allerdings habe ich jetzt das problem an eine Gültige PID zu kommen.
Mit WH=FindWindow("","Name") hole ich den Handler des Fensters.
Mit PID=GetWindowThreadProcessID(WH,0) hole ich die Process ID
Mit PIDH=OpenProcess(($1F0FFF,0,PID) sollte ich eigentlich den Process öffnen können. Aber da kommt immer nur 0 bei raus.
Ich denke ich mache da etwas grundlegend falsch. Möchte noch anmerken das ich das nicht in PB machen möchte. Im prinzip solte es ja mit der API immer funktionieren.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung
PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung
PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler

- tft
- Beiträge: 650
- Registriert: 08.09.2004 20:18
- Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
- Wohnort: Dachsen
- Kontaktdaten:
Hi ...
für alle die es interesiert. Ich habe etwas grundlegendes falsch gemacht.
Die Funktion OpenProcess() erwartet die PID nicht als Wert sondern als Zeiger auf eine Speicheradresse. Das ergebniss ist dann der Handler auf den geöffneten Process.
für alle die es interesiert. Ich habe etwas grundlegendes falsch gemacht.
Die Funktion OpenProcess() erwartet die PID nicht als Wert sondern als Zeiger auf eine Speicheradresse. Das ergebniss ist dann der Handler auf den geöffneten Process.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung
PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung
PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler

Öhm, nein, eigentlich nicht.tft hat geschrieben:Hi ...
für alle die es interesiert. Ich habe etwas grundlegendes falsch gemacht.
Die Funktion OpenProcess() erwartet die PID nicht als Wert sondern als Zeiger auf eine Speicheradresse. Das ergebniss ist dann der Handler auf den geöffneten Process.
Vieleicht irgendeine Eigenheit der Sprache in der du die API verwendest?
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Wie Thorium bereits schrieb wird der Wert nicht als Zeiger uebergeben.tft hat geschrieben:Hi ...
für alle die es interesiert. Ich habe etwas grundlegendes falsch gemacht.
Die Funktion OpenProcess() erwartet die PID nicht als Wert sondern als Zeiger auf eine Speicheradresse. Das ergebniss ist dann der Handler auf den geöffneten Process.
Wenn der OpenProcess null zurueck liefert, pruefe mit GetLastError.