<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://api.springnote.com">
  <identifier type="integer">699252</identifier>
  <title>&#54788;&#51116; &#54876;&#49457;&#54868;&#46108; &#54532;&#47196;&#49464;&#49828; &#51221;&#48372; &#44032;&#51256;&#50724;&#44592;</title>
  <relation_is_part_of type="integer">428871</relation_is_part_of>
  <date_modified type="datetime">2008-01-07T13:09:31Z</date_modified>
  <uri>http://tkss8329.springnote.com/pages/699252</uri>
  <date_created type="datetime">2008-01-07T12:25:08Z</date_created>
  <source>&lt;p&gt;MFC&#48260;&#51260; :&amp;nbsp;&amp;nbsp;&lt;a href="/pages/699252/attachments/301871" title="ProcessControl.zip" class="attachment"&gt;ProcessControl.zip&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;ConSole&#48260;&#51260;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table class="datatable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;// &#52980;&#54028;&#51068;&#49884;&#50640;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#include "windows.h"&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#53080;&#49556;&#54532;&#47196;&#44536;&#47016;&#49884;&#50640;....&#50952;&#46020;&#50864;OS&#45236;&#51032; &#54532;&#47196;&#49464;&#49828; &#51221;&#48372;&#47484; &#50508;&#50500;&#45236;&#44592; &#50948;&#54644;&lt;br /&gt;
#include "Tlhelp32.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#54532;&#47196;&#49464;&#49828;&lt;br /&gt;
#include "stdio.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#54364;&#51456;&#51077;&#52636;&#47141; &#54632;&#49688;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
DWORD TaskList()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;HANDLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hProcessSnap = NULL;&lt;br /&gt;
&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = FALSE;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;PROCESSENTRY32 pe32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = {0};&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;if (hProcessSnap == INVALID_HANDLE_VALUE)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp; return (DWORD)INVALID_HANDLE_VALUE;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;pe32.dwSize = sizeof(PROCESSENTRY32);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;if (Process32First(hProcessSnap, &amp;amp;pe32))&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp; DWORD Code = 0;&lt;br /&gt;
&amp;nbsp; DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwPriorityClass;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; do&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; HANDLE hProcess;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; // Get the actual priority class.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; //if(!hProcess)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; //&amp;nbsp; break;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; dwPriorityClass = GetPriorityClass (hProcess);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CHAR Temp[MAX_PATH];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; strcpy(Temp,pe32.szExeFile);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; printf("%s : %d\n",Temp,pe32.th32ProcessID);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; //Temp.MakeLower();&lt;br /&gt;
&amp;nbsp;&amp;nbsp; /*if (Temp == ProcessName)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; if (TerminateProcess(hProcess, 0))&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; GetExitCodeProcess(hProcess, &amp;amp;Code);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return GetLastError();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CloseHandle (hProcess);&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; while (Process32Next(hProcessSnap, &amp;amp;pe32));&lt;br /&gt;
&amp;nbsp; Return = TRUE;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp; Return = FALSE;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;CloseHandle (hProcessSnap);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;return Return;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;TaskList();&lt;br /&gt;
&amp;nbsp;system("pause");&lt;br /&gt;
&amp;nbsp;return 0;&lt;br /&gt;
}&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style="MARGIN-LEFT: 2em"&gt;&lt;strong&gt;MSDN&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table class="datatable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;
#include &amp;lt;tlhelp32.h&amp;gt;&lt;br /&gt;
#include &amp;lt;tchar.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;
&lt;p&gt;//&amp;nbsp; Forward declarations:&lt;br /&gt;
BOOL GetProcessList( );&lt;br /&gt;
BOOL ListProcessModules( DWORD dwPID );&lt;br /&gt;
BOOL ListProcessThreads( DWORD dwOwnerPID );&lt;br /&gt;
void printError( TCHAR* msg );&lt;/p&gt;
&lt;p&gt;void main( )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; GetProcessList( );&lt;br /&gt;
&amp;nbsp; system("pause");&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;BOOL GetProcessList( )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; HANDLE hProcessSnap;&lt;br /&gt;
&amp;nbsp; HANDLE hProcess;&lt;br /&gt;
&amp;nbsp; PROCESSENTRY32 pe32;&lt;br /&gt;
&amp;nbsp; DWORD dwPriorityClass;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Take a snapshot of all processes in the system.&lt;br /&gt;
&amp;nbsp; hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );&lt;br /&gt;
&amp;nbsp; if( hProcessSnap == INVALID_HANDLE_VALUE )&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("CreateToolhelp32Snapshot (of processes)") );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return( FALSE );&lt;br /&gt;
&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Set the size of the structure before using it.&lt;br /&gt;
&amp;nbsp; pe32.dwSize = sizeof( PROCESSENTRY32 );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Retrieve information about the first process,&lt;br /&gt;
&amp;nbsp; // and exit if unsuccessful&lt;br /&gt;
&amp;nbsp; if( !Process32First( hProcessSnap, &amp;amp;pe32 ) )&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("Process32First") ); // show cause of failure&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle( hProcessSnap );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clean the snapshot object&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return( FALSE );&lt;br /&gt;
&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Now walk the snapshot of processes, and&lt;br /&gt;
&amp;nbsp; // display information about each process in turn&lt;br /&gt;
&amp;nbsp; do&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n\n=====================================================" );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; _tprintf( TEXT("\nPROCESS NAME:&amp;nbsp; %s"), pe32.szExeFile );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n-----------------------------------------------------" );&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Retrieve the priority class.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dwPriorityClass = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( hProcess == NULL )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("OpenProcess") );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwPriorityClass = GetPriorityClass( hProcess );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !dwPriorityClass )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("GetPriorityClass") );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle( hProcess );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp; Process ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x%08X", pe32.th32ProcessID );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp; Thread count&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = %d",&amp;nbsp;&amp;nbsp; pe32.cntThreads );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp; Parent process ID = 0x%08X", pe32.th32ParentProcessID );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp; Priority base&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = %d", pe32.pcPriClassBase );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( dwPriorityClass )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp; Priority class&amp;nbsp;&amp;nbsp;&amp;nbsp; = %d", dwPriorityClass );&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // List the modules and threads associated with this process&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ListProcessModules( pe32.th32ProcessID );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ListProcessThreads( pe32.th32ProcessID );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; } while( Process32Next( hProcessSnap, &amp;amp;pe32 ) );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; CloseHandle( hProcessSnap );&lt;br /&gt;
&amp;nbsp; return( TRUE );&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
BOOL ListProcessModules( DWORD dwPID )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; HANDLE hModuleSnap = INVALID_HANDLE_VALUE;&lt;br /&gt;
&amp;nbsp; MODULEENTRY32 me32;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Take a snapshot of all modules in the specified process.&lt;br /&gt;
&amp;nbsp; hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );&lt;br /&gt;
&amp;nbsp; if( hModuleSnap == INVALID_HANDLE_VALUE )&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("CreateToolhelp32Snapshot (of modules)") );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return( FALSE );&lt;br /&gt;
&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Set the size of the structure before using it.&lt;br /&gt;
&amp;nbsp; me32.dwSize = sizeof( MODULEENTRY32 );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Retrieve information about the first module,&lt;br /&gt;
&amp;nbsp; // and exit if unsuccessful&lt;br /&gt;
&amp;nbsp; if( !Module32First( hModuleSnap, &amp;amp;me32 ) )&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("Module32First") );&amp;nbsp; // show cause of failure&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle( hModuleSnap );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clean the snapshot object&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return( FALSE );&lt;br /&gt;
&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Now walk the module list of the process,&lt;br /&gt;
&amp;nbsp; // and display information about each module&lt;br /&gt;
&amp;nbsp; do&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; _tprintf( TEXT("\n\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MODULE NAME:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %s"),&amp;nbsp;&amp;nbsp; me32.szModule );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; _tprintf( TEXT("\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Executable&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = %s"),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; me32.szExePath );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x%08X",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; me32.th32ProcessID );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref count (g)&amp;nbsp; = 0x%04X",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; me32.GlblcntUsage );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref count (p)&amp;nbsp; = 0x%04X",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; me32.ProccntUsage );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Base address&amp;nbsp;&amp;nbsp; = 0x%08X", (DWORD) me32.modBaseAddr );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Base size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = %d",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; me32.modBaseSize );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; } while( Module32Next( hModuleSnap, &amp;amp;me32 ) );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; CloseHandle( hModuleSnap );&lt;br /&gt;
&amp;nbsp; return( TRUE );&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;BOOL ListProcessThreads( DWORD dwOwnerPID )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; HANDLE hThreadSnap = INVALID_HANDLE_VALUE;&lt;br /&gt;
&amp;nbsp; THREADENTRY32 te32;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; // Take a snapshot of all running threads&amp;nbsp;&lt;br /&gt;
&amp;nbsp; hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );&lt;br /&gt;
&amp;nbsp; if( hThreadSnap == INVALID_HANDLE_VALUE )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return( FALSE );&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; // Fill in the size of the structure before using it.&lt;br /&gt;
&amp;nbsp; te32.dwSize = sizeof(THREADENTRY32 );&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; // Retrieve information about the first thread,&lt;br /&gt;
&amp;nbsp; // and exit if unsuccessful&lt;br /&gt;
&amp;nbsp; if( !Thread32First( hThreadSnap, &amp;amp;te32 ) )&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printError( TEXT("Thread32First") ); // show cause of failure&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle( hThreadSnap );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clean the snapshot object&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return( FALSE );&lt;br /&gt;
&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Now walk the thread list of the system,&lt;br /&gt;
&amp;nbsp; // and display information about each thread&lt;br /&gt;
&amp;nbsp; // associated with the specified process&lt;br /&gt;
&amp;nbsp; do&lt;br /&gt;
&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( te32.th32OwnerProcessID == dwOwnerPID )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; THREAD ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x%08X", te32.th32ThreadID );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Base priority&amp;nbsp; = %d", te32.tpBasePri );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( "\n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delta priority = %d", te32.tpDeltaPri );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; } while( Thread32Next(hThreadSnap, &amp;amp;te32 ) );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; CloseHandle( hThreadSnap );&lt;br /&gt;
&amp;nbsp; return( TRUE );&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;void printError( TCHAR* msg )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; DWORD eNum;&lt;br /&gt;
&amp;nbsp; TCHAR sysMsg[256];&lt;br /&gt;
&amp;nbsp; TCHAR* p;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; eNum = GetLastError( );&lt;br /&gt;
&amp;nbsp; FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL, eNum,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sysMsg, 256, NULL );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Trim the end of the line and terminate it with a null&lt;br /&gt;
&amp;nbsp; p = sysMsg;&lt;br /&gt;
&amp;nbsp; while( ( *p &amp;gt; 31 ) || ( *p == 9 ) )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ++p;&lt;br /&gt;
&amp;nbsp; do { *p-- = 0; } while( ( p &amp;gt;= sysMsg ) &amp;amp;&amp;amp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( ( *p == '.' ) || ( *p &amp;lt; 33 ) ) );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Display the message&lt;br /&gt;
&amp;nbsp; _tprintf( TEXT("\n&amp;nbsp; WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );&lt;br /&gt;
}&lt;br /&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</source>
  <rights nil="true"></rights>
  <creator>http://tkss8329.myid.net/</creator>
  <contributor_modified>http://tkss8329.myid.net/</contributor_modified>
  <version type="integer">6</version>
  <tags></tags>
</page>
