HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
{
if (!_tcscmp(pe.szExeFile, L"VCdemo.exe"))
{
if(bNoPrint == FALSE&&RefreshThreadList(pe.th32ProcessID))
{
bNoPrint = TRUE;
TRACE("VCdemo.exe ProcessID :0x%X
",pe.th32ProcessID);
}
}
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 == INVALID_HANDLE_VALUE)
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)
{
/*printf( "
TID %d
", te32.th32ThreadID);
printf( "Owner PID %d
", te32.th32OwnerProcessID);
printf( "Delta Priority %d
", te32.tpDeltaPri);
printf( "Base Priority %d
", te32.tpBasePri); */
TRACE("VCdemo.exe nTID :0x%X
",te32.th32ThreadID);
TRACE("VCdemo.exe Owner PID :0x%X
",te32.th32OwnerProcessID);
//TRACE("VCdemo.exe Delta Priority :0x%X
",te32.tpDeltaPri);
//TRACE("VCdemo.exe Base Priority :0x%X
",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);
}