Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie 32-Bit-Programme von 64-Bit-Programmen unterscheiden? (https://www.delphipraxis.net/151626-wie-32-bit-programme-von-64-bit-programmen-unterscheiden.html)

Delphi-Laie 25. Mai 2010 20:07


Wie 32-Bit-Programme von 64-Bit-Programmen unterscheiden?
 
Hallo Delphifreunde!

Im Taskmanager meines 64-Bit-Windows (6.1) finden sich hinter den Namen der 32-Bit-Prozesse ein unscheinbares „*32“. Das ließ in mir folgende Frage aufkommen: Wie kann man 32-Bit-Programme und 64-Bit-Programme treffsicher voneinander unterscheiden?

Unter Windows mit 32-Bit ist das zumindest auf manuellem Wege einfach (was nicht starten kann bzw. was man nicht gestartet bekommt, hat zuviele Bits), aber umgekehrt, also in einem 64-Bit-Windows?!

Die Funktion „CreateToolhelp32Snapshot“ scheint jedenfalls zur Ermittlung der Bitanzahl/-breite nicht geeignet zu sein.

Weiß jemand, welchen Zaubertrickes sich der Taskmanager bedient, um das eine vom anderen zu unterscheiden?

Vielen Dank im voraus!

Delphi-Laie

Bernhard Geyer 25. Mai 2010 20:26

Re: Wie 32-Bit-Programme von 64-Bit-Programmen unterscheiden
 
Wenn du weißt um welchen Dateinamen es geht, einfach in den PE-Header schauen.

Delphi-Laie 25. Mai 2010 20:30

Re: Wie 32-Bit-Programme von 64-Bit-Programmen unterscheiden
 
Danke!

Zacherl 25. Mai 2010 21:50

Re: Wie 32-Bit-Programme von 64-Bit-Programmen unterscheiden
 
MSDN-Library durchsuchenIsWOW64Process wäre wohl die einfachste Lösung :)

Dabei ist ein der Prozess ein 64 bit Prozess, wenn:
Delphi-Quellcode:
(IsWOW64Process(GetCurrentProcess)) and (not IsWOW64Process(hTargetProcess))
Die erste Abfrage prüft, ob du überhaupt in einem 64 bit System bist (da dein Delphi Prozess sicher 32 bit ist, sofern du nicht mit Lazarus kompilierst) und die zweite Abfrage prüft, ob der Zielprozess NICHT im 32 Subsystem (WOW64) läuft.

Delphi-Laie 26. Mai 2010 11:29

Re: Wie 32-Bit-Programme von 64-Bit-Programmen unterscheiden
 
Zitat:

Zitat von Zacherl
Delphi-Quellcode:
(IsWOW64Process(GetCurrentProcess)) and (not IsWOW64Process(hTargetProcess))
Die erste Abfrage prüft, ob du überhaupt in einem 64 bit System bist (da dein Delphi Prozess sicher 32 bit ist, sofern du nicht mit Lazarus kompilierst) und die zweite Abfrage prüft, ob der Zielprozess NICHT im 32 Subsystem (WOW64) läuft.

Danke, aber ist es nicht umgekehrt? GetCurrentProcess ist doch der eigene Prozeß, während andererseits hTargetProcess die übergeordnete Ebene nahelegt?!

Edit: Ich ziehe diese meine Gegenfrage zurück, ich war wohl etwas irritiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz