DMA Copy ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
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 ?

Beitrag von tft »

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
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 :-)
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

und täglich grüßt das Murmeltier...
in der PBOSL (findest du über purearea.net oderweiter unten)
gibt es eine Library wo genau das gemacht wird.
Und sogar der source gibts auch noch dazu.
Global Shared Memory
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: DMA Copy ?

Beitrag von Thorium »

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.
Doch ist es. Musst halt 2 API-Funktionen verwenden: ReadProcessMemory und WriteProcessMemory für weitere Infos die MSDN befragen.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
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:

Beitrag von tft »

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.
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 :-)
Benutzeravatar
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:

Beitrag von tft »

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.
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 :-)
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

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.
Öhm, nein, eigentlich nicht.
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! Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

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.
Wie Thorium bereits schrieb wird der Wert nicht als Zeiger uebergeben.
Wenn der OpenProcess null zurueck liefert, pruefe mit GetLastError.
Antworten