AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fremden Thread anhalten (SuspendThread)
Thema durchsuchen
Ansicht
Themen-Optionen

Fremden Thread anhalten (SuspendThread)

Ein Thema von Zacherl · begonnen am 10. Dez 2006 · letzter Beitrag vom 10. Dez 2006
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

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

Fremden Thread anhalten (SuspendThread)

  Alt 10. Dez 2006, 11:35
Hi,

wie kann ich den HauptThread einer fremden Anwendung anhalten? Ich habe die PID des Prozesses. Jetzt muss ich irgendwie ein Handle auf den Mainthread erhalten, um diesen dann mit SuspendThread anzuhalten ...

Weiß jemand wie das geht?

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Fremden Thread anhalten (SuspendThread)

  Alt 10. Dez 2006, 11:39
MSDN-Library durchsuchenCreateToolhelp32Snapshot dürfte dein Freund und Helfer sein...

  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Fremden Thread anhalten (SuspendThread)

  Alt 10. Dez 2006, 12:28
Habe jetzt folgendes gefunden:

Code:
unsigned long GetTargetThreadIdFromWindow(char *className, char *windowName)

    HWND targetWnd;
    HANDLE hProcess
    unsigned long processId, pTID, threadID;

    targetWnd = FindWindow(className, windowName);
    GetWindowThreadProcessId(targetWnd, &processId);


    _asm { 
   mov eax, fs:[0x18]
   add eax, 36 
   mov [pTID], eax
    } 

    hProcess = OpenProcess(PROCESS_VM_READ, false, processID);
    ReadProcessMemory(hProcess, (const void *)pTID, &threadID, 4, NULL);
    CloseHandle(hProcess);

    return threadID;
}
Kann mir das jemand nach Delphi portieren?

Ein paar Zeilen kann man weglassen, da ich die PID des Prozesses bereits kenne und nicht anhand des Fensterhandles ermitteln muss. Ich nehme einfach mal 435 als Beispiel.

Code:
unsigned long GetTargetThreadIdFromWindow(char *className, char *windowName)

    HWND targetWnd;
    HANDLE hProcess
    unsigned long processId, pTID, threadID;

    processID = 435;


    _asm { 
   mov eax, fs:[0x18]
   add eax, 36 
   mov [pTID], eax
    } 

    hProcess = OpenProcess(PROCESS_VM_READ, false, processID);
    ReadProcessMemory(hProcess, (const void *)pTID, &threadID, 4, NULL);
    CloseHandle(hProcess);

    return threadID;
}
Vielen Dank
Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Fremden Thread anhalten (SuspendThread)

  Alt 10. Dez 2006, 13:59
So, hab das mal soweit selber gemacht:

Delphi-Quellcode:
function GetMainThread(PID: Integer): THandle;
var
  ThreadID,
  pTID: Longint;
  hProcess: THandle;
  lpRead: Cardinal;
begin
  asm
    mov eax, fs:[$18]
    add eax, 36
    mov [pTID], eax
  end;

  hProcess := OpenProcess(PROCESS_VM_READ, false, PID);
  ReadProcessMemory(hProcess, @pTID, @threadID, SizeOf(ThreadID), lpRead);
  CloseHandle(hProcess);

  Result := ThreadID;
end;
Nur leider ist meine ThreadID immer ungültig ... woran kann das liegen?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Fremden Thread anhalten (SuspendThread)

  Alt 10. Dez 2006, 14:28
Das liegt daran das du nirgends die ThreadID ausliest. Hast du dir überhaupt mal in der Hilfe angeschaut welche Parameter ReadProcessMemory erwartet?
Ich würde dir einfach empfehlen die Methoden verwenden welche dir bereits empfohlen wurden. Diese funktionieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Fremden Thread anhalten (SuspendThread)

  Alt 10. Dez 2006, 15:04
Mh ich habe gelesen, dass man hiermit die ThreadID ermitteln kann. Aber okey, mit CreateToolbarHelp32Snapshot funktionierts

Danke an alle.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 01:19 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