首页
社区
课程
招聘
[求助]在已知某PID后,以及改进程内某模块名称,能否知道该模块在此进程内创建的所有线程id呢
2008-7-31 12:42 4329

[求助]在已知某PID后,以及改进程内某模块名称,能否知道该模块在此进程内创建的所有线程id呢

2008-7-31 12:42
4329
function GetThreadProcAddress(ProcId, ThreadId: DWORD): DWORD;
const
  THREAD_ALL_ACCESS = $001F03FF;
var
  hThread: DWORD;
  hProc: DWORD;
  Rtn: DWORD;
  ThreadInfo: THREAD_BASIC_INFORMATION;
  p: Pointer;
begin
  Result := 0;
  hProc := OpenProcess(PROCESS_ALL_ACCESS, false, ProcId);
  hThread := OpenThread(THREAD_ALL_ACCESS, false, ThreadId);
  if (hProc = 0) or (hThread = 0) then Exit;
  try
    ZeroMemory(@ThreadInfo, SizeOf(ThreadInfo));
    NtQueryInformationThread(hThread, ThreadBasicInformation, @ThreadInfo, SizeOf(ThreadInfo), @Rtn);

    p := ThreadInfo.TebBaseAddress;
    while true do
    begin
      ReadProcessMemory(hProc, p, @Result, SizeOf(DWORD), Rtn);
      if Result <> $FFFFFFFF then
        p := Pointer(Result)
      else
        Break;
    end;
    ReadProcessMemory(hProc, Pointer(dword(p) + SizeOf(DWORD) * 6), @Result, SizeOf(DWORD), Rtn);
  form1.memo1.Lines.Add('ThreadProc: ' + inttostr(ThreadInfo.ClientId.UniqueProcess));
  finally
    CloseHandle(hProc);
    CloseHandle(hThread);
  end;
end;

上面的代码总是调试不成功,哪个朋友帮我看下要怎么弄呢?

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
TGOS 2008-7-31 13:37
2
0
Delphi 直接用 ToolHelp32 就可以了 Uses : Tlhelp32;

看 Delphi 的帮助 有说明

CreateToolHelp32SnapShot(TH32CS_SNAPTHREAD        ,0);
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cpshow 2008-7-31 18:22
3
0
晕,帮忙啊啊啊啊
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cpshow 2008-8-1 11:00
4
0
顶   的  顶
游客
登录 | 注册 方可回帖
返回