TlHelp32枚举进程、线程、模块信息

通过tlhelp32提供的api,可以很容易的获取进程、模块、线程的快照信息。

所涉及头文件:

tlhelp32.h

枚举进程Process信息:

HANDLE hSnapshot;

PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };

HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, dwPid);

if(hProcessSnap == INVALID_HANDLE_VALUE)

{

return -1;

}

if(Process32First(hProcessSnap, &pe32))

{

do

{

printf("process id: %d\n", pe32.th32ProcessID);

}

while(Process32Next(hProcessSnap, &pe32));

}

CloseHandle(hProcessSnap);

枚举模块module信息:

MODULEENTRY32 Mod32;

Mod32.dwSize=sizeof(Mod32);

HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);

if( hSnap == INVALID_HANDLE_VALUE )

{

printf("无法打开该程序模块!");

CloseHandle(hSnap);

return;

}

BOOL bModule = Module32First(hSnap,&Mod32);

while(bModule)

{

printf("module process id: %d \n", Mod32.th32ProcessID);

bModule=Module32Next(hSnap,&Mod32);

}

CloseHandle(hSnap);

枚举线程Thread信息:

THREADENTRY32 te32;

te32.dwSize=sizeof(te32);

HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);

if( hSnap == INVALID_HANDLE_VALUE )

{

printf("无法打开该程序模块!");

CloseHandle(hSnap);

return;

}

BOOL bThread = Thread32First(hSnap,&te32);

while(bThread)

{

printf("owner process id: %d \n", te32.th32OwnerProcessID);

printf("thread id: %d \n", te32.th32ThreadID);

bThread = Thread32Next(hSnap,&te32);

}

CloseHandle(hSnap);

时间: 2024-10-13 04:12:47

TlHelp32枚举进程、线程、模块信息的相关文章

MVC4做网站后台:模块管理1、修改模块信息

网站可能会包含一些模块:像文章.产品.图片.留言等. 栏目模块主要实现功能,启用或禁用模块,模块权限设置,模块上传设置等. 权限设置和上传设置以后专门考虑,先来显示或禁用模块. 1.在顶部导航栏添加管理连接 打开Home/Header.cshtml,在<nav>添加代码 2.添加Module接口 using Ninesky.Models; using System.Linq; namespace Ninesky.Areas.Admin.Repository { /// <summary&

如何更改/删除magento首页产品/广告图片等模块信息

如何更改/删除magento首页产品/广告图片等模块信息,如果只是修改一些简单的地方,例如已经存在 的左右栏目里面的图片内容等,是很简单的,直接在后台就可以修改的,具体如下: 如何删除magento首页不需要的信息. 首先登陆后台.CMS=>Manage Pages=>选择edite page=>Home page=>选择custom design. 然后选择相应的模板,选择相应的列数, 编辑里面的内容. <reference name=”content”> <b

SQL点滴13—收集SQLServer线程等待信息

原文:SQL点滴13-收集SQLServer线程等待信息 要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据. sys.dm_os_wait_stats 这是一个系统视图,里面存储线程所遇到的所有的等待信息,具体的列如下表 列名 数据类型 说明 Wait_type Nvarchar(60) 等待类型名称 waiting_tasks_count Bigint 等待类型的等待数.该计数

python 线程模块

Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁. threading 模块提供的其他方法: threading.currentThread(): 返回当前的线程变量. threading.enumerate(): 返回一个包含正在运行的线程的list.正在运行指线程启动后.结束前,不包括启动前和终止后的线程. threading.activeCount(): 返回正在运行的线程数量,与len(threading.

如何根据线程号获取模块信息

在得到线程之后,便可以通过openThread得到HANDLE,之后通过ZwQueryInformationThread获取线程信息. Part1 准备: #include <psapi.h> #include <locale.h> #include <iostream> #pragma comment(lib,"psapi.lib") typedef enum _THREADINFOCLASS { ThreadBasicInformation, T

apache 各平台进程线程模块解析

Apache是一个跨平台的web服务器,由于其简单高效.稳定安全的特性,被广泛应用于计算机技术的各个领域.现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器. 尽 管如此,在实际的生产环境中,我们仍然不可能直接使用默认配置的Apache来充当服务器.毕竟,为了更充分合理地利用Apache服务器,我们都应该根 据自己的实际需要对Apache的默认配置作出一些必要的调整.而针对Apache的优化配置过程中,修改Apache的最大并发连接数就显得尤为重要. 在修改Apache的最

Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息

原文地址:http://www.javatang.com 前一段时间上线的系统升级之后,出现了严重的高CPU的问题,于是开始了一系列的优化处理之中,现在将这个过程做成一个系列的文章. 基本概念 在对Java内存泄漏进行分析的时候,需要对jvm运行期间的内存占用.线程执行等情况进行记录的dump文件,常用的主要有thread dump和heap dump. thread dump 主要记录JVM在某一时刻各个线程执行的情况,以栈的形式显示,是一个文本文件.通过对thread dump文件可以分析出

线程模块threading

线程 -Threading模块 -使用和进程基本相似 多线程中是可以input的 在使用的过程中从用户层面上并没有感觉到和进程的差别,但是有本质差别 执行代码的最小单元 每一个进程至少有一个线程,这个线程是主线程 一个进程内的所有线程之间的数据是共享的 #启动多线程 from threading import Thread import time def func(i): time.sleep(1) print(i) for i in range(10): t = Thread(target=f

如何从线程返回信息——轮询、回调、Callable

考虑有这样一个LiftOff类: /** * 类LiftOff.java的实现描述:显示发射之前的倒计时 * */ public class LiftOff implements Runnable { public LiftOff(){ taskCount++;// 计数自增 } private int countDown = 3; // 倒计时数字 private static int taskCount = 0; private int id = taskCount; @Override p