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