Entwickler-Ecke

Windows API - Liste ALLER geladenen DLLs?


Matthias Jaensch - Sa 08.05.04 17:02
Titel: Liste ALLER geladenen DLLs?
Hallo,

ich finde einfach nichts. Vielleicht mal wieder nicht dokumentiert? :(
Kann man sich eine Liste aller geladener DLLs anzeigen lassen?
(Nicht der DLLs eines Prozesses, obwohl auch das schon helfen würde. Dann nämlich alle Prozesse und für jeden die DLLs auflisten. Wie bekommt man dann aber die DLLs, die noch geladen sind, obwohl der Prozess schon beendet ist?)

Ich habe das mit createtoolhelp32snapshot(TH32CS_SNAPALL,0) probiert oder auch getprocessname (für NT4), aber nix.
Bei Win98SE zeigt er wenigstens noch die Kernel32.dll an. Bei XP Home gar nichts mehr. Was tun?
Könnt Ihr helfen?

Gruß
Matthias


Delete - Sa 08.05.04 17:10

Kuck dir auf meiner Seite: http://downloads.luckie-online.de mal meine Sysinfo an, ist mit Code.


Matthias Jaensch - Sa 08.05.04 20:20

Hallo Lucky,

vielen Dank für die schnelle Antwort. Also habe ich schon in die richtige Richtung probiert. Aber das wollte eben nicht und dokumentiert ist es ja auch nirgends, oder kannst Du mir da einen Tipp geben?
Bei XP (Home) geht alles wunderbar. :) Es wird zwar auch Explorer.exe als Module angezeigt, aber das kann ja sein.
Für NT4 konnte ich es leider nicht testen, weil ich momentan kein NT4 habe.
Und in Win98SE zeigt es gar nichts an. :( Kennst Du da auch einen Trick?

Aber trotzdem sehr gut und genau, was ich will. :)
Allerdings zeigt es auch nicht die Module an, die noch drin sind, obwohl der Prozess schon raus ist.
Gibt's da vielleicht auch was?

Gruß und vielebn Dank
Matthias


Matthias Jaensch - So 09.05.04 09:39
Titel: (Fast) gelöst!
Hallo Luckie (diesmal richtig geschrieben!),

ich kenne inzwischen den Fehler in Deinem Programm!

Eigentlich sind es zwei:
if Process32First(hModuleSnap, pe32) then
while Process32Next(hModuleSnap, pe32) do
wird den ersten Prozess nie bearbeiten.

while Module32Next(hSnapShot, me32) do
zeigt auch nie den ersten Module (Module32First) und ist immer falsch, wenn nicht zuerst Module32First aufgerufen wurde.
(Jedenfalls unter Win98SE!)

Wenn man das korrigiert, geht es in Ordnung. Allerdings wird unter Win32SE auch kein voller Pfad angezeigt.
Unter XP geht es aber.

Gruß
Matthias


Delete - So 09.05.04 13:57

Den ersten Prozess will ich auch gar nicht. Das ist nämlich der Dummy System-Prozess immer.

Was ist Win32SE? :shock:

Das die Funktion unter Windows 9x anders arbeitet ist mir bekannt, da mein Programm aber eh nicht auf 9x läuft, ist mir das egal.


raziel - So 09.05.04 15:00

Luckie hat folgendes geschrieben:
Was ist Win32SE?

nicht Win32SE sondern Win98SE = Windows 98 Second Edition.
Gab ja auch von Win95 mehrere Versionen: Win95a,Winn95b und Win95c.


raziel


Matthias Jaensch - So 09.05.04 17:37
Titel: (Fast) alles geklärt
Hallo,

Win32SE ist natürlich Win98SE. Ich habe doch bisher nur davon geschrieben. Man kann sich doch mal verschreiben.

Jetzt funktioniert alles auch unter Win98SE. Ich habe nur noch das Problem, dass in der "Modulliste" auch eine Reihe Prozesse mit aufgeführt werden.
Aber da teste ich eben mit einer "Prozessliste" gegen. Kein Problem.

Danke an alle!
Matthias


Motzi - So 09.05.04 21:05

Warum... Exe-Dateien sind doch auch Module..!


Matthias Jaensch - Mo 10.05.04 09:43

Hallo Motzi,

klar, aber sie gehören nicht unbedingt in eine Liste der geladenen DLLs.
Siehe meine "Urfrage".

Tschau
Matthias


Delete - Mo 10.05.04 10:11

Unter Win9x ist die kernel.exe auch eine DLL, obwohl sie die Endung exe hat-