Obter Nome/Descrição Ou Startaddress De Uma Thread Em Um Processo

Delphi

24/04/2011

Venho lhe pedir uma ajuda, porque o meu conhecimento é limitado
e vire para o conhecimento de vocês.

A situação é esta, alguns devem saber um programa chamado
Process Hacker fez um gerenciador de processos em C. Ele tem uma opção
interessante que quando você clica duas vezes um processo de constantes
Messenger exemplo Explorer ou ... ele traz várias informações
incluindo
Tópicos relacionados com o processo. Ele tem PDD, Ciclos Delta, Start
Endereço prioridade. Bem que eu tentei fazer algo semelhante em Delphi, mas
apenas
Recebo o TID e prioritário ... Eu não posso colocar o Start info
Endereço da seguinte forma: "msiltcfg.dll 0x258!"ou só pode retornar
00630EFA.

O aplicativo Process Hacker traz as informações na imagem abaixo:
 



Como resolver isso? com base no código exemplo a seguir. Se alguém
pode me ajudar eu agradeço. ( weder.fs@gmail.com )

procedure TForm1.Button7Click (Sender: TObject); 
var 
tbi: THREAD_BASIC_INFORMATION; 
hThreadSnap, Process, hThread, ThreadInfo: THandle; 
te32: tagTHREADENTRY32; 
me32: MODULEENTRY32; 
th32: THREADENTRY32; 
dwPID: DWORD; 

startaddr: Pointer; 
Status: LongInt; 
Error: DWORD; 
modname: String; 
hToken: DWORD; 
TKP: TOKEN_PRIVILEGES; 
otkp: TOKEN_PRIVILEGES; 
dwLen: dword; 


begin 
hThreadSnap: = CreateToolhelp32Snapshot (TH32CS_SNAPTHREAD, 0); 
= INVALID_HANDLE_VALUE then if hThreadSnap 
Exit; 
try 
dwPID: = GetProcessID (Trim (Edit1.Text)); 

te32.dwSize: = SizeOf (THREADENTRY32); 

me32.dwSize: = SizeOf (MODULEENTRY32); 

ListBox1.Items.Clear; 
ListBox2.Items.Clear; 

if not Thread32First (hThreadSnap, te32) then 
Exit; 
repeat 
then if te32.th32OwnerProcessID = dwPID 
begin 
hThread: = OpenThread (THREAD_ALL_ACCESS, 
False, te32.th32ThreadID); 
status: = ZwQueryInformationThread (hThread, 
9, { ThreadQuerySetWin32StartAddress, }
@ Startaddr, 
SizeOf (startaddr) 
@ DwLen); 

listbox1.Items.AddObject (Format ('StartAddress:% p' 
[Startaddr]) + 'ID:' + IntToStr (te32.th32ThreadID), TObject (hThread)); 
if hThread <> 0 then 
CloseHandle (hThread); 
end; 
Until not Thread32Next (hThreadSnap, te32); 
finally 
CloseHandle (hThreadSnap); 
end; 
end;
Weder S

Weder S

Curtidas 0

Respostas

José

José

24/04/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR