Einzelnen Beitrag anzeigen

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