在 MSDN 上查了半天资料,查到一个 GetProcessIdOfThread 函数,可是这个函数只能在 Windows Server 2003 上使用。谁知道在 Win2K/XP 下怎样实现?注:目标线程不是 GUI 线程,没有窗口,所以也不能使用 GetWindowThreadProcessId 函数。

解决方案 »

  1.   

    #include "Tlhelp32.h"
    DWORD __stdcall GetProcessIdOfThread(DWORD dwThreadId)
    {
      HANDLE hSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,NULL);
      if(hSnap == NULL)
      {
         return NULL;
      }  DWORD dwProcessId = NULL;
      THREADENTRY32 threadInfo;
      threadInfo.dwSize = sizeof(THREADENTRY32);
      BOOL bLoop = ::Thread32First(hSnap,&threadInfo);
      while(bLoop)
      {
        if(threadInfo.th32ThreadID == dwThreadId)
        {
           dwProcessId = threadInfo.th32OwnerProcessIDl;
           break;
        }
        bLoop = ::Thread32Next(hSnap,&threadInfo);
      }
      ::CloseHandle(hSnap);
      return dwProcessId;
    }
      

  2.   

    The GetProcessHeaps function obtains handles to all of the heaps that are valid for the calling process.DWORD GetProcessHeaps(
      DWORD NumberOfHeaps,  // maximum number of heap handles 
      PHANDLE ProcessHeaps  // buffer for heap handles
    );