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

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

2008-7-31 12:42
4868
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;

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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Delphi 直接用 ToolHelp32 就可以了 Uses : Tlhelp32;

看 Delphi 的帮助 有说明

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