AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi EnumProcessModules - Nur ein Teil der ReadProcessMemory ..
Thema durchsuchen
Ansicht
Themen-Optionen

EnumProcessModules - Nur ein Teil der ReadProcessMemory ..

Ein Thema von Zacherl · begonnen am 19. Mär 2009 · letzter Beitrag vom 20. Mär 2009
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

EnumProcessModules - Nur ein Teil der ReadProcessMemory ..

  Alt 19. Mär 2009, 19:01
Hey,

ich habe ein seltsames Problem. Mit folgendem Code versuche ich alle Module eines Prozesses zu ermitteln:
Delphi-Quellcode:
var
  hProcess: THandle;
  ModuleList: Array[0..511] of HMODULE;
begin
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, Process^.ProcessId);
  if (hProcess <> 0) and (hProcess <> INVALID_HANDLE_VALUE) then
  begin
    try
      if EnumProcessModules(hProcess, @ModuleList, SizeOf(ModuleList),
        dwReturnLength) then
      begin
Unter XP funktioniert dies soweit, aber mein Vista X64 wirft mir folgende Meldung, wenn ich GetLastError abfrage:
Zitat:
[Window Title]
Kisikiller

[Content]
Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen

[OK]
Der Aufruf von EnumProcessModules schlägt zudem fehl.

Hat jemand eine Idee woran das liegen kann?

Gruß Zacherl
  Mit Zitat antworten Zitat
_BlackDragon_

Registriert seit: 4. Dez 2007
Ort: Eschweiler
64 Beiträge
 
#2

Re: EnumProcessModules - Nur ein Teil der ReadProcessMemory

  Alt 20. Mär 2009, 11:23
Hi,

kannst du denn auch die Fehlernummer posten?

Du bist dir sicher, dass du unter XP alle Informationen bekommst?
Ich frage bezüglich der Privilegien deines Prozesses. Falls der nämlich nicht die richtigen Privilegien hat (z.B. DebugPrivilege) bekommst du z.B. keine/nicht alle Informationen zu System-Prozessen etc.

Wie das mit Vista (und hier speziel der 64bit-Version) aussieht, kann ich so nicht sagen, mangels Testumgebung und Erfahrung.

Probiers mal mit:

hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or GENERIC_READ, false, Process^.ProcessId); Bei mir funktionierts wunderbar (unter XP) für ALLE Informationen. Ich hatte mit dem DesiredAcces PROCESS_ALL_ACCESS auch schonmal Probleme.

Gruß

BlackDragon
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: EnumProcessModules - Nur ein Teil der ReadProcessMemory

  Alt 20. Mär 2009, 11:31
Ist das ein 64-Bit Prozess?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: EnumProcessModules - Nur ein Teil der ReadProcessMemory

  Alt 20. Mär 2009, 16:23
Also unter XP funktioniert der Code wie gesagt wunderbar. Es liegt wirklich daran, dass der Zielprozess ein 64 Bit Prozess ist. Im MSDN habe ich bei einer Suche nach der Fehler Konstante die Beschreibung gefunden, nach der 64 Bit Module nicht aus einem 32 Bit Prozess aus aufgelistet werden können.

Hat diese Beschränkung irgendeinen Technischen Hintergrund oder kann man das irgendwie umgehen?

Oder anders gefragt: Gibt es eine Möglichkeit die ImageBase der 'kernel32.dll' innerhalb eines anderen Prozesses auszumachen? Ich habe eine Routine gebastelt, die inline Hooks in anderen Prozessen wiederherstellen kann, indem die ersten 7 Bytes eines Exports mit den Originaldaten überschrieben werden. Dazu benötige ich leider die Basisadresse des Moduls.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: EnumProcessModules - Nur ein Teil der ReadProcessMemory

  Alt 20. Mär 2009, 16:40
In den allermeisten Fällen hat doch Kernel32.dll seine Preferred Image Base. Die einzige Ausnahme sollte sein, wenn irgendjemand ein Programm so kompiliert, dass es selbst diese Image Base belegt. Nun stellt sich eben die Frage, ob deine Routine "sicher" gegenüber einem Programm sein muss, welches absichtlich so kompiliert wurde.
Ich vermute mal, dass diese Einschränkung einen technischen Hintergrund hat, denn sie existiert auch bei den Toolhelp-Funktionen (das wäre meine nächste Anlaufstelle gewesen) und diversen anderen Funktionen, die Informationen von anderen Prozessen erfragen.
Ansonsten einfach auf den 64-Bit-Compiler warten oder eine andere Sprache benutzen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: EnumProcessModules - Nur ein Teil der ReadProcessMemory

  Alt 20. Mär 2009, 18:19
Zum einem könnte ich mir vorstellen, dass die Imagebaseddress an einer anderen Stelle iegt und zum anderen könnte ich mir vorstellen, dass Windows es einfach nicht zu lässt. NicoDE weiß hier bestimmt mehr.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 02:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz