枚举进程及其调用动态链接看(进程快照)
2009-03-17 12:57
302 查看
BOOL GetProcessList( );
BOOL ListProcessModules( DWORD dwPID );
BOOL ListProcessThreads( DWORD dwOwnerPID );
void printError( TCHAR* msg );
void printError( TCHAR* msg );
void main( )
{
GetProcessList( );
}
BOOL GetProcessList( )
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
printError( "CreateToolhelp32Snapshot (of processes)" );
return( FALSE );
}
// Set the size of the structure before using it.
pe32.dwSize = sizeof( PROCESSENTRY32 );
// Retrieve information about the first process,
// and exit if unsuccessful
if( !Process32First( hProcessSnap, &pe32 ) )
{
printError( "Process32First" ); // Show cause of failure
CloseHandle( hProcessSnap ); // Must clean up the snapshot object!
return( FALSE );
}
// Now walk the snapshot of processes, and
// display information about each process in turn
do
{
printf( "/n/n=====================================================" );
printf( "/nPROCESS NAME: %s", pe32.szExeFile );
printf( "/n-----------------------------------------------------" );
// Retrieve the priority class.
dwPriorityClass = 0;
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
if( hProcess == NULL )
printError( "OpenProcess" );
else
{
dwPriorityClass = GetPriorityClass( hProcess );
if( !dwPriorityClass )
printError( "GetPriorityClass" );
CloseHandle( hProcess );
}
printf( "/n process ID = 0x%08X", pe32.th32ProcessID );
printf( "/n thread count = %d", pe32.cntThreads );
printf( "/n parent process ID = 0x%08X", pe32.th32ParentProcessID );
printf( "/n Priority Base = %d", pe32.pcPriClassBase );
if( dwPriorityClass )
printf( "/n Priority Class = %d", dwPriorityClass );
// List the modules and threads associated with this process
ListProcessModules( pe32.th32ProcessID );
ListProcessThreads( pe32.th32ProcessID );
} while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap );
return( TRUE );
}
BOOL ListProcessModules( DWORD dwPID );
BOOL ListProcessThreads( DWORD dwOwnerPID );
void printError( TCHAR* msg );
void printError( TCHAR* msg );
void main( )
{
GetProcessList( );
}
BOOL GetProcessList( )
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
printError( "CreateToolhelp32Snapshot (of processes)" );
return( FALSE );
}
// Set the size of the structure before using it.
pe32.dwSize = sizeof( PROCESSENTRY32 );
// Retrieve information about the first process,
// and exit if unsuccessful
if( !Process32First( hProcessSnap, &pe32 ) )
{
printError( "Process32First" ); // Show cause of failure
CloseHandle( hProcessSnap ); // Must clean up the snapshot object!
return( FALSE );
}
// Now walk the snapshot of processes, and
// display information about each process in turn
do
{
printf( "/n/n=====================================================" );
printf( "/nPROCESS NAME: %s", pe32.szExeFile );
printf( "/n-----------------------------------------------------" );
// Retrieve the priority class.
dwPriorityClass = 0;
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
if( hProcess == NULL )
printError( "OpenProcess" );
else
{
dwPriorityClass = GetPriorityClass( hProcess );
if( !dwPriorityClass )
printError( "GetPriorityClass" );
CloseHandle( hProcess );
}
printf( "/n process ID = 0x%08X", pe32.th32ProcessID );
printf( "/n thread count = %d", pe32.cntThreads );
printf( "/n parent process ID = 0x%08X", pe32.th32ParentProcessID );
printf( "/n Priority Base = %d", pe32.pcPriClassBase );
if( dwPriorityClass )
printf( "/n Priority Class = %d", dwPriorityClass );
// List the modules and threads associated with this process
ListProcessModules( pe32.th32ProcessID );
ListProcessThreads( pe32.th32ProcessID );
} while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap );
return( TRUE );
}
相关文章推荐
- Visual Studio下建立并隐式调用自己的动态链接库dll
- c++调用dll动态链接库历程
- 动态链接时进程堆栈信息
- 通过DLL路径,实现动态调用动态链接库中指定类的(静态)方法和属性
- 如何用c语言调用c++做成的动态链接库
- 在自己构造的DLL动态链接库中调用winmm.lib的mciSendString函数有问题
- C#中动态调用DLL动态链接库
- VBA 调用DLL动态链接库
- 使用Java调用dll动态链接库
- android源码环境下动态链接库so的隐式调用
- [编程实例]Dev-C++编写动态调用dll杀进程的程序
- 快照枚举进程/直接枚举进程
- Java调用C/C++编写的第三方dll动态链接库
- linux动态链接代码调用dlopen
- 借助NDK,Android与C动态链接库的相互调用
- C++ builder调用vc编写的动态链接库的方法
- r0调用ntOpenprocess函数枚举进程
- 调用特定动态链接库的函数
- android的APP调用C语言的动态链接库的实现步骤
- VC调用Delphi制作的动态链接库如何互相传递字符串