Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi VirtualQueryEx (https://www.delphipraxis.net/186012-virtualqueryex.html)

Mattze 27. Jul 2015 18:04

VirtualQueryEx
 
Hallo,

ich habe jetzt eine ganze Weile mit VirtualQueryEx gespielt, kriege es aber einfach nicht hin.
Inzwischen bin ich der Meinung, dass das bei mir gar nicht gehen kann!
Ich arbeite unter Windows 7 pro 64 (!!!) mit Delphi 7 pro.
Meine Frage:
Kann ein 32-bit-Programm überhaupt den Speicher unter einem 64-bit-System von einem anderen 32-bit-Programm lesen? (Die Speicheradressen von 64-bit-Programmen können garantiert nicht gelesen werden!)

Und, wenn ja, wie kriege ich von laufenden Prozessen "schnell" raus, ob sie 32- oder 64-bittig sind? Und wie geht das Lesen bei 32-bittigen?

Gruß
Mattze

Zacherl 27. Jul 2015 18:54

AW: VirtualQueryEx
 
Zitat:

Zitat von Mattze (Beitrag 1309955)
Kann ein 32-bit-Programm überhaupt den Speicher unter einem 64-bit-System von einem anderen 32-bit-Programm lesen?

Die normale API wird dir ERROR_PARTIAL_COPY zurückgeben vermute ich. Mit diesem Trick sollte es funktionieren:
http://rce.co/knockin-on-heavens-gat...ode-switching/

Ist allerdings recht hacky.

Wenn ich mich recht erinnere gibt es ab Vista (oder Win7) auch die undokumentierte NtWow64QueryVirtualMemory64 API (hier hatte ich mal ein Beispiel zur NtWow64QueryProcessInformation API gebastelt). Ist aber alles nicht wirklich sauber.

Zitat:

Zitat von Mattze (Beitrag 1309955)
Und, wenn ja, wie kriege ich von laufenden Prozessen "schnell" raus, ob sie 32- oder 64-bittig sind?

MSDN-Library durchsuchenIsWow64Process sollte helfen. Wenn unter einem 64 Bit Windows ausgeführt und auf einen 32 Bit Prozess angewendet, ist der Rückgabewert true.

Mattze 27. Jul 2015 19:36

AW: VirtualQueryEx
 
Hallo,

ich danke Dir für die schnelle und gute Antwort.

Und, ja, O-JE! Ist ja mächtig viel!
Da mich keiner drängelt, kann ich mir das aber alles schön in Ruhe angucken.

Vielleicht klappt es ja, wenn ich das VirtualQueryEx von vornherein nur auf 32-Bit-Prozesse anwende.

Die bessere und sowieso zukunftssichere Variante wäre es bestimmt, sich ein 64Bit-fähiges Delphi zu leisten. Aber da will ich momentan noch nicht so richtig ran, da ich zurzeit "nur" Hobbyprogrammierer bin.
Und dann die ganzen nötigen Anpassungen...

Gruß
Mattze

Zacherl 27. Jul 2015 19:52

AW: VirtualQueryEx
 
Zitat:

Zitat von Mattze (Beitrag 1309965)
Die bessere und sowieso zukunftssichere Variante wäre es bestimmt, sich ein 64Bit-fähiges Delphi zu leisten

Genau, das wäre langfristig sicherlich die beste Lösung, wobei die native API vermutlich auch recht zuverlässig ist. Das Heavens Gate würde ich nur als allerletzten Ausweg benutzen.

Mattze 31. Jul 2015 15:32

AW: VirtualQueryEx
 
Hallo,

vielen Dank, noch mal!
Klappt seit einer Weile wunderbar.
Es ist wirklich problemlos möglich, mit einem 32Bit-Programm die Speicherbereiche anderer 32Bit-Programme zu ermitteln.
Eigentlich erstaunlich!

Nun bin ich aber auf den Geschmack gekommen und habe mal Dienste probiert.
Da klappt einiges nicht, aber das wird gleich ein neues Thema...

Gruß
Mattze

Zacherl 1. Aug 2015 02:16

AW: VirtualQueryEx
 
Zitat:

Zitat von Mattze (Beitrag 1310525)
Nun bin ich aber auf den Geschmack gekommen und habe mal Dienste probiert.
Da klappt einiges nicht

SeDebugPrivilege aktivieren, dann sollte es auch da funktionieren :-D

Mattze 1. Aug 2015 06:07

AW: VirtualQueryEx
 
Hallo Zacherl,

die Debugrechte habe ich mir natürlich gleich zu Anfang gegeben.
Aber...

Siehe meinen letzten Post bei "Dienste und PID" hierselbst.

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 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