栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++扫描系统进程源码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++扫描系统进程源码


把做工程过程比较重要的一些代码片段备份一次,如下代码是关于C++扫描系统进程的代码。

#include  

#include  

#include  

#include  

#include  

using namespace std;  

int main()  

{  

    HANDLE hProcessSnap;  

    HANDLE hProcess;  

    if(hProcessSnap == INVALID_HANDLE_VALUE)  

    {  

        cout<<"快照创建失败"<

        return 0;  

    }  

    pe32.dwSize = sizeof(PROCESSENTRY32);  

    if(Process32First( hProcessSnap, &pe32) == NULL)  

    {  

        cout<<"error"<

        CloseHandle(hProcessSnap);  

    }  

    int i = 0;  

    do{  

        cout<<"------------"<

        _tprintf( TEXT("nPROCESS NAME: %s"), pe32.szExeFile );  

        cout<

        cout<< "Process ID = "<< pe32.th32ProcessID <

        cout<< "Thread count = "<

        cout<< "Parent process ID = "<< pe32.th32ParentProcessID <

        cout<< "Priority base = "<< pe32.pcPriClassbase <

    }while( Process32Next( hProcessSnap, &pe32) );  

    return 0;  

}  

当然,上面程序是我从一个程序中摘出来的,这是源程序,忘了引用的哪了,如果作者看到,请告知引用地址。这个程序实现了对系统进程,单个进程和线程的快照,主要还是拿几个函数,有时间的话做一个可视化的,和大家分享

#include  

#include  

#include  

#include  

BOOL GetProcessList( );  

BOOL ListProcessModules( DWORD dwPID );  

BOOL ListProcessThreads( DWORD dwOwnerPID );  

void main( )  

{   

    GetProcessList( );  

}  

BOOL GetProcessList( )  

{   

    HANDLE hProcessSnap;   

    HANDLE hProcess;   

    hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );   

    CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。    

    if( hProcessSnap == INVALID_HANDLE_VALUE )   

    {   

        printError( TEXT("CreateToolhelp32Snapshot (of processes)") );   

        return( FALSE );   

    if( !Process32First( hProcessSnap, &pe32 ) )   

    {   

        ( FALSE );   

    do {  

        printf( "nn=====================================================" );   

        _tprintf( TEXT("nPROCESS NAME: %s"), pe32.szExeFile );   

        dwPriorityClass = 0;   

        hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );   

        OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。   

        if( hProcess == NULL )  

            printError( TEXT("OpenProcess") );   

        else {   

            dwPriorityClass = GetPriorityClass( hProcess );   

            if( !dwPriorityClass )   

                printError( TEXT("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 )   

    } while( Process32Next( hProcessSnap, &pe32 ) );  

    CloseHandle( hProcessSnap );   

    return( TRUE );  

}  

BOOL ListProcessModules( DWORD dwPID )  

{  

    HANDLE hModuleSnap = INVALID_HANDLE_VALUE;   

    hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );  

    if( hModuleSnap == INVALID_HANDLE_VALUE )   

    {  

        printError( TEXT("CreateToolhelp32Snapshot (of modules)") );   

        return( FALSE );  

    if( !Module32First( hModuleSnap, &me32 ) )   

    {  

        return( FALSE );  

    do {  

        _tprintf( TEXT("nn MODULE NAME: %s"), me32.szModule );  

        _tprintf( TEXT("n Executable = %s"), me32.szExePath );  

        printf( "n Process ID = 0x%08X", me32.th32ProcessID );  

        printf( "n Ref count (g) = 0x%04X", me32.GlblcntUsage );  

        printf( "n Ref count (p) = 0x%04X", me32.ProccntUsage );  

        printf( "n base address = 0x%08X", (DWORD) me32.modbaseAddr );   

        printf( "n base size = %d", me32.modbaseSize );  

    } while( Module32Next( hModuleSnap, &me32 ) );   

    CloseHandle( hModuleSnap );   

    return( TRUE );  

}  

BOOL ListProcessThreads( DWORD dwOwnerPID )   

{   

    HANDLE hThreadSnap = INVALID_HANDLE_VALUE;   

    hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );   

    if( hThreadSnap == INVALID_HANDLE_VALUE )   

    if( !Thread32First( hThreadSnap, &te32 ) )   

    {  

        return( FALSE );  

    do {   

        if( te32.th32OwnerProcessID == dwOwnerPID )   

        {   

            printf( "nn THREAD ID = 0x%08X", te32.th32ThreadID );   

            printf( "n base priority = %d", te32.tpbasePri );  

            printf( "n Delta priority = %d", te32.tpDeltaPri );   

        }   

    } while( Thread32Next(hThreadSnap, &te32 ) );   

    CloseHandle( hThreadSnap );   

    return( TRUE );  

}  

{   

    DWORD eNum;   

    TCHAR sysMsg[256];   

    eNum = GetLastError( );   

    p = sysMsg;  

        ++p;   

    do {  

    _tprintf( TEXT("n WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );  

}   

©著作权归作者所有:来自51CTO博客作者bulepaper的原创作品,如需转载,请注明出处,否则将追究法律责任


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号