科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道如何枚举系统当前进程

如何枚举系统当前进程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

笔者用上述函数做了一个类似任务管理器的进程管理器可以枚举所有进程、关闭进程。

作者:巧巧读书 来源:巧巧读书 2008年9月2日

关键字: 进程 系统进程 进程管理

  • 评论
  • 分享微博
  • 分享邮件

  首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:

  HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);

  其中:

  dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;

  th32ProcessID是进程号,为0表示当前进程。

  返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);获取返回的进程

  如果Process32First返回TRUE,则第一个进程的信息已经在LPPROCESSENTRY32结构中,其余进程信息可用BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)获得

  LPPROCESSENTRY32结构的定义如下: typedef struct tagPROCESSENTRY32 {

  DWORD dwSize; //此结构的大小

  DWORD cntUsage; //进程的引用数,如果为0,则次进程已停止

  DWORD th32ProcessID; //进程号

  ULONG_PTR th32DefaultHeapID;

  DWORD th32ModuleID; //此进程引用的模块ID

  DWORD cntThreads; //此进程创建的线程数

  DWORD th32ParentProcessID; //父进程的ID

  LONG pcPriClassBase; //这个进程创建的线程的基本优先权

  DWORD dwFlags; //保留

  TCHAR szExeFile[MAX_PATH];

  } PROCESSENTRY32;

  typedef PROCESSENTRY32 *PPROCESSENTRY32;    最后不要忘了调用: CloseHandle();   另用函数是: HANDLE OpenProcess(

  DWORD dwDesiredAccess, // access flag

  BOOL bInheritHandle,  // handle inheritance option

  DWORD dwProcessId    // process identifier

  );   用它可打开一个进程,打开进程后,可用: BOOL TerminateProcess(

  HANDLE hProcess, // handle to the process

  UINT uExitCode  // exit code for the process

  );   来关闭进程。

  笔者用上述函数做了一个类似任务管理器的进程管理器可以枚举所有进程、关闭进程。细节请参见源代码。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章