如题,如何通过已知的线程ID取得进程ID?

解决方案 »

  1.   


    BOOL RefreshThreadList (DWORD dwOwnerPID) 

        HANDLE        hThreadSnap = NULL; 
        BOOL          bRet        = FALSE; 
        THREADENTRY32 te32        = {0}; 
     
        // Take a snapshot of all threads currently in the system.     hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); 
        if (hThreadSnap == (HANDLE)-1) 
            return (FALSE); 
     
        // Fill in the size of the structure before using it.     te32.dwSize = sizeof(THREADENTRY32); 
     
        // Walk the thread snapshot to find all threads of the process. 
        // If the thread belongs to the process, add its information 
        // to the display list.
     
        if (Thread32First(hThreadSnap, &te32)) 
        { 
            do 
            { 
                if (te32.th32OwnerProcessID == dwOwnerPID) 
                { 
                    TRACE( "\nTID\t\t%d\n", te32.th32ThreadID); 
                    TRACE( "Owner PID\t%d\n", te32.th32OwnerProcessID); 
                    TRACE( "Delta Priority\t%d\n", te32.tpDeltaPri); 
                    TRACE( "Base Priority\t%d\n", te32.tpBasePri); 
                } 
            } 
            while (Thread32Next(hThreadSnap, &te32)); 
            bRet = TRUE; 
        } 
        else 
            bRet = FALSE;          // could not walk the list of threads 
     
        // Do not forget to clean up the snapshot object.     CloseHandle (hThreadSnap); 
     
        return (bRet); 

    te32.th32OwnerProcessID