AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TlHelp32 - "SnapModule32" nicht enthalten???
Thema durchsuchen
Ansicht
Themen-Optionen

TlHelp32 - "SnapModule32" nicht enthalten???

Ein Thema von hhhuut · begonnen am 17. Nov 2014 · letzter Beitrag vom 14. Mai 2015
Antwort Antwort
hhhuut
(Gast)

n/a Beiträge
 
#1

TlHelp32 - "SnapModule32" nicht enthalten???

  Alt 17. Nov 2014, 20:45
Delphi-Version: XE5
Hallo liebe DP-Community,

Ich stehe gerade vor einem Problem:

Ich habe mir folgende Prozedur geschrieben, die alle geladenen Module eines Prozesses anzeigen soll:

Delphi-Quellcode:
procedure ListProcessModules(cThreadID: Cardinal; var SL: TStringList);
var
  Snapshot: THandle;
  Module: TModuleEntry32;
begin
  Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, cThreadID);
  if (Snapshot <> 0) and (Snapshot <> INVALID_HANDLE_VALUE) then
  begin
    try
      ZeroMemory(@Module, SizeOf(TModuleEntry32));
      Module.dwSize := SizeOf(TModuleEntry32);
      if Module32First(Snapshot, Module) then
        repeat
          SL.Add(StrPas(Module.szModule));
        until not Module32Next(Snapshot, Module);
    finally
      CloseHandle(Snapshot);
    end;
  end;
end;
Die EXE aus der diese Prozedur aufgerufen wird compiliere ich als 64bit. Allerdings werden nun entsprechend nur geladene 64bit Module eines Prozesses angezeigt.
Nach ein wenig Sucherei habe ich dann herausgefunden, dass ich statt/zusätzlich zu "TH32CS_SNAPMODULE" noch den Parameter "TH32CS_SNAPMODULE32" angeben müsste.
Das Problem ist, dass Delphi diesen Paramter in der Unit TlHelp32.pas nicht findet!
Delphi-Quellcode:
// dwFlags
//
const
{$EXTERNALSYM TH32CS_SNAPHEAPLIST}
  TH32CS_SNAPHEAPLIST = $00000001;
{$EXTERNALSYM TH32CS_SNAPPROCESS}
  TH32CS_SNAPPROCESS = $00000002;
{$EXTERNALSYM TH32CS_SNAPTHREAD}
  TH32CS_SNAPTHREAD = $00000004;
{$EXTERNALSYM TH32CS_SNAPMODULE}
  TH32CS_SNAPMODULE = $00000008;
{$EXTERNALSYM TH32CS_SNAPALL}
  TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST or TH32CS_SNAPPROCESS or
    TH32CS_SNAPTHREAD or TH32CS_SNAPMODULE;
{$EXTERNALSYM TH32CS_INHERIT}
  TH32CS_INHERIT = $80000000;
//
// Use CloseHandle to destroy the snapshot
In der C++ Headerdatei (TlHelp32.h) ist er aber noch angegeben.
Meine Frage wäre jetzt: Hab ich einfach nur eine falsche/kaputte TlHelp32 Unit oder (wenn nicht) weiß jemand, wie ich mit einem 64bit Programm trotzdem 32bit & 64bit Module eines anderen Prozesses mir anzeigen lassen kann?

Liebe Grüße
Erik

P.S.: Ich benutze Delphi XE5
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: TlHelp32 - "SnapModule32" nicht enthalten???

  Alt 17. Nov 2014, 22:03
Ergänze die Konstante doch einfach in deinem Code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hhhuut
(Gast)

n/a Beiträge
 
#3

AW: TlHelp32 - "SnapModule32" nicht enthalten???

  Alt 17. Nov 2014, 22:22
Ich hätte nicht gedacht, dass es tatsächlich so einfach ist. Jetzt läuft alles perfekt.
Vielen vielen Dank dafür!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: TlHelp32 - "SnapModule32" nicht enthalten???

  Alt 12. Mai 2015, 19:49
Welcher (64-Bit-?)Prozeß hat denn 32-Bit-Module geladen, hhhuut und ggf. auch die anderen?

Ich stehe nämlich auch noch vor dem bis heute für mich ungelösten Rätsel, mir diese 32-Bit-Module anzeigen zu lassen.
  Mit Zitat antworten Zitat
hhhuut
(Gast)

n/a Beiträge
 
#5

AW: TlHelp32 - "SnapModule32" nicht enthalten???

  Alt 12. Mai 2015, 20:32
Welcher (64-Bit-?)Prozeß hat denn 32-Bit-Module geladen, hhhuut und ggf. auch die anderen?
Du hast das glaube ich ein wenig falsch verstanden. Es geht darum, dass wenn ich die EXE mit obenstehender Prozedur als 32bit compiliere, dann zeigt das Programm, wenn ich einen 32bit-Prozess auswähle, alle geladenen Module an. Wenn ich einen 64bit-Prozess auswähle, dann zeigt es nichts an, da 32bit Programme nicht berechtigt sind, in irgendeiner Weise mit 64bit Programmen zu interagieren.

Wenn ich mein Programm mit obenstehender Prozedur allerdings als 64bit compiliere, dann zeigt das Programm bei einem ausgewählten 64bit-Prozess alle geladenen Module an, bei einem 32bit Prozess allerdings nichts, da es in diesem Fall nur nach 64bit-Modulen sucht, die es bei einem reinen 32bit-Prozess ja nicht gibt. Um meinem 64bit-Programm also zu sagen, dass es auch nach geladenen 32bit-Modulen schauen soll, sodass ich auch bei 32bit-Prozessen die geladenen Module angezeigt bekomme, brauche ich die zusätzliche Konstante "TH32CS_SNAPMODULE32".

Die gesamte Prozedur für 64bit sieht also folgendermaßen aus:
Delphi-Quellcode:
procedure ListProcessModules(cThreadID: Cardinal; var SL: TStringList);
var
  Snapshot: THandle;
  Module: TModuleEntry32;
begin
  Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE Or TH32CS_SNAPMODULE32, cThreadID);
  if (Snapshot <> 0) and (Snapshot <> INVALID_HANDLE_VALUE) then
  begin
    try
      ZeroMemory(@Module, SizeOf(TModuleEntry32));
      Module.dwSize := SizeOf(TModuleEntry32);
      if Module32First(Snapshot, Module) then
        repeat
          SL.Add(StrPas(Module.szModule));
        until not Module32Next(Snapshot, Module);
    finally
      CloseHandle(Snapshot);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: TlHelp32 - "SnapModule32" nicht enthalten???

  Alt 12. Mai 2015, 20:42
Vielen Dank, das erhellt die Sache für mich ein wenig! Hatte ich wohl tatsächlich falsch verstanden. Ich werde mich demnächst intensiver damit beschäftigen.
  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 21:56 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