• 进程枚举之PSAPI函数


    使用PSAPI (Process StatusAPI)函数

    这是一种Windows NT/2000下的方法。核心是使用EnumProcesses函数。它的原型如下:

    BOOL EnumProcesses(

    __out  DWORD *lpidProcess, // 用于保存所有进程的PID的数组

    __in   DWORD cb, // 上述数组的大小

    __out  DWORD *cbNeeded // PID数组中实际返回的(有效)字节数

    );

    当获得系统中所有进程的PID后,我们就可以使用OpenProcess函数打开指定的进程,再调用GetModuleBaseName获得该进程的名字,调用EnumProcessModules枚举该进程调用的所有模块,调用GetModuleFileNameEx获得模块文件的全路径。

    #include <windows.h>

    #include <stdio.h>

    #include <tchar.h>

    #include "psapi.h"

    #pragma comment(lib,"psapi.lib")

     

    void PrintProcessNameAndID( DWORDprocessID )

    {

             TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

             //Get a handle to the process.

             HANDLEhProcess = OpenProcess( PROCESS_QUERY_INFORMATION |

                       PROCESS_VM_READ,

                       FALSE,processID );

     

             //Get the process name.

             if(NULL != hProcess )

             {

                       HMODULE hMod;

                       DWORD cbNeeded;

                       if( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 

                                &cbNeeded))

                       {

                                GetModuleBaseName(hProcess, hMod, szProcessName, 

                                         sizeof(szProcessName)/sizeof(TCHAR));

                       }

             }

     

             //Print the process name and identifier.

             _tprintf(TEXT("%s  (PID: %u) "),szProcessName, processID );

             CloseHandle(hProcess );

    }

     

    void main( )

    {

             //Get the list of process identifiers.

             DWORD aProcesses[1024], cbNeeded, cProcesses;

             unsigned int i; 

     

             if( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )

                       return;

     

             //Calculate how many process identifiers were returned.

             cProcesses= cbNeeded / sizeof(DWORD);

     

             //Print the name and process identifier for each process.

             for( i = 0; i < cProcesses; i++ )

                       if(aProcesses[i] != 0 )

                                PrintProcessNameAndID(aProcesses[i] );

             system("pause");

    }

  • 相关阅读:
    JWT在flask中的demo
    14.Android开发笔记:碎片(Fragment)
    13.Android开发笔记:界面开发最佳实践
    12.Android开发笔记:RecyclerView
    11.Android开发笔记:ListView
    10.Android开发笔记:布局控件(五) 自定义控件
    9.Android开发笔记:布局控件(四) 百分比布局
    8.Android开发笔记:布局控件(三)FrameLayout 帧布局
    7.Android开发笔记:布局控件(二)RelativeLayout 相对布局
    6.Android开发笔记:布局控件(一)LinearLayout 线性布局
  • 原文地址:https://www.cnblogs.com/huhu0013/p/3274758.html
Copyright © 2020-2023  润新知