1

EnumProcess または CreateToolhelp32Snapshot 関数は、プロセス ID を含むプロセス情報を取得するのに役立ちます。

しかし、現在のプロセスのスレッドIDリストを取得することを知りたいです。

DWORD GetMainThreadId(DWORD pId)
{
    LPVOID lpThId;

    _asm
    {
        mov eax, fs:[18h]
        add eax, 36
        mov [lpThId], eax
    }

    HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, pId);
    if(hProcess == NULL)
        return NULL;

    DWORD tId;
    if(ReadProcessMemory(hProcess, lpThId, &tId, sizeof(tId), NULL) == FALSE)
    {
        CloseHandle(hProcess);
        return NULL;
    }

    CloseHandle(hProcess);

    return tId;
}

このコードはメインスレッドIDを取得するためのものですが、他のスレッドモジュールを取得してメインスレッド以外を終了させたいです。

API関数またはメソッドはありますか?

私のOS:Windows 7 Ultimate

開発ツール: Visual Studio 2008

4

2 に答える 2

3

スレッド ウォーキングをご覧ください。

基本的には、壁にぶち当たるまでコールThread32Firstしてコールしなければなりません。Thread32Next

于 2014-04-17T19:41:04.693 に答える
0

アプリケーションのプロセス ID がわかっている場合は、現在のプロセスのスレッド スナップショットを使用して、プロセスに関連付けられているスレッドの完全なリストを反復処理できます。

bool GetProcessThreads(DWORD PID) {
  HANDLE thread_snap = INVALID_HANDLE_VALUE;
  THREADENTRY32 te32;

  // take a snapshot of all running threads
  thread_snap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
  if (thread_snap == INVALID_HANDLE_VALUE) {
    printf("Invalid Handle Value");
    return(FALSE);
  }

  // fill in the size of the structure before using it. 
  te32.dwSize = sizeof(THREADENTRY32);

  // retrieve information about the first thread,
  // and exit if unsuccessful
  if (!Thread32First(thread_snap, &te32)) {
    printf("Thread32First Error");
    CloseHandle(thread_snap);
    return(FALSE);
  }

  // now walk the thread list of the system,
  // and display thread ids of each thread
  // associated with the specified process
  do {
    if (te32.th32OwnerProcessID == PID)
      printf("THREAD ID: 0x%08X",te32.th32ThreadID);
  } while (Thread32Next(thread_snap, &te32));

  // clean up the snapshot object.
  CloseHandle(thread_snap);
  return(TRUE);
}

次に、以下のようにメインまたはその他の場所で上記の関数を呼び出すことができます。

void main() {
  GetProcessThreads(PID) // write the process id of your application here
}
于 2020-04-16T08:55:23.017 に答える