CreateToolhelp32Snapshot快照表

CreateToolhelp32Snapshot 进程快照函数的应用实例  CreateToolhelp32Snapshot  CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。  HANDLE WINAPI CreateToolhelp32Snapshot(  DWORD dwFlags,  DWORD th32ProcessID 阅读详情

CreateToolhelp32Snapshot枚举进程 CreateToolhelp32Snapshot枚举进程
每一个应用程序实例在运行起来后都会在当前系统下产生一个进程,大多数应用程序均拥有可视界面,用户可以通过标题栏上的关闭按钮关闭程序。但是也有为数不少的在后台运行的程序是没有可视界面的,对于这类应用程序用户只能通过CTRL+ALT+DEL热键呼出"关闭程序"对话框显示出当前系统进程列表,从中可以结束指定的任务。显然,该功能在一些系统监控类软件中还是非常必需的,其处理过程大致可以分为两步:借助系统快照实现对系统当前进程的枚举和根据枚举结果对进程进行管理。本文下面即将对此过程的实现进行介绍。
当前进程的枚举
要对当前系统所有已开启的进程进行枚举,就必须首先获得那些加载到内存的进程当前相关状态信息。在Windows操作系统下,这些进程的当前状态信息不能直接从进程本身获取,系统已为所有保存在系统内存中的进程、线程以及模块等的当前状态的信息制作了一个只读副本--系统快照,用户可以通过对系统快照的访问完成对进程当前状态的检测。在具体实现时,系统快照句柄的获取是通过Win32 API函数CreateToolhelp32Snapshot()来完成的,通过该函数不仅可以获取进程快照,而且对于堆、模块和线程的系统快照同样可以获取。
使用这个函数前必须在头文件里包含tlhelp32.h头文件。
CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。
HANDLE WINAPI CreateToolhelp32Snapshot(
                                       DWORD dwFlags,
                                       DWORD th32ProcessID
                                       );
参数:其中,参数dwFlags:指定将要创建包含哪一类系统信息的快照句柄,本程序中只需要检索系统进程信息,因此可将其设置为TH32CS_SNAPPROCESS;函数第二个参数th32ProcessID`则指定了进程的标识号,当设置为0时指定当前进程。
dwFlags
[输入]指定快照中包含的系统内容,这个参数能够使用下列数值(变量)中的一个。
   TH32CS_INHERIT - 声明快照句柄是可继承的。
   TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。
   TH32CS_SNAPHEAPLIST - 在快照中包含在th32ProcessID中指定的进程的所有的堆。
   TH32CS_SNAPMODULE - 在快照中包含在th32ProcessID中指定的进程的所有的模块。
   TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。
   TH32CS_SNAPTHREAD - 在快照中包含系统中所有的线程。
th32ProcessID
[输入]指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或TH32CS_SNAPMOUDLE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。
返回值:
调用成功,返回快照的句柄,调用失败,返回INVAID_HANDLE_VALUE。
备注:
使用GetLastError函数查找该函数产生的错误状态码。
要删除快照,使用CloseHandle函数。
在得到快照句柄之后只能以只读的方式对其进行访问。至于对系统快照句柄的使用同普通对象句柄的使用并没有什么太大区别,在使用完之后也需要通过CloseHandle()函数将其销毁。
BOOL Process32First()函数
           参数:HANDLE hSnapshot 传入的Snapshot句柄
           参数:LPPROCESSENTRY32 lppe 指向PROCESSENTRY32结构的指针
           作用:从Snapshot得到第一个进程记录信息
BOOL Process32Next()函数
           参数:HANDLE hSnapshot 传入的Snapshot句柄
           参数:LPPROCESSENTRY32 lppe 指向PROCESSENTRY32结构的指针
           作用:从Snapshot得到下一个进程记录信息
BOOL Module32First()函数
           参数:HANDLE hSnapshot传入的Snapshot句柄
           参数:LPMODULEENTRY3 lpme 指向一个 MODULEENTRY32结构的指针
           作用:从Snapshot得到第一个Module记录信息
BOOL Module32Next()函数
           参数:HANDLE hSnapshot传入的Snapshot句柄
           参数:LPMODULEENTRY3 lpme 指向一个 MODULEENTRY32结构的指针
           作用:从Snapshot得到下一个Module记录信息
BOOL Thread32First()函数
           参数:HANDLE hSnapshot传入的Snapshot句柄
           参数:LPTHREADENTRY32 lpte指向一个 THREADENTRY32结构的指针
           作用:从Snapshot得到第一个Thread记录信息
BOOL Thread32Next()函数
           参数:HANDLE hSnapshot传入的Snapshot句柄
           参数:LPTHREADENTRY32 lpte指向一个 THREADENTRY32结构的指针
           作用:从Snapshot得到下一个Thread记录信息
HANDLE OpenProcess()函数
           参数:DWORD dwDesiredAccess 权限描叙信息
这里我用到了PROCESS_ALL_ACCESS功能是具有所有权限
           参数:BOOL bInheritHandle 确定该句柄是否可以被程继承
           参数:dwPrcessID 进程ID号
           作用:打开一个存在的进程对象
列举进程
在得到系统的快照句柄后,就可以对当前进程的标识号进行枚举了,通过这些枚举出的进程标识号可以很方便的对进程进行管理。进程标识号通过函数Process32First() 和 Process32Next()而得到,这两个函数可以枚举出系统当前所有开启的进程,并且可以得到相关的进程信息。 这两个函数原型声明如下:
      BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
      BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
   以上两个函数分别用于获得系统快照中第一个和下一个进程的信息,并将获取得到的信息保存在指针lppe所指向的PROCESSENTRY32结构中。函数第一个参数hSnapshot为由CreateToolhelp32Snapshot()函数返回得到的系统快照句柄;第二个参数lppe为指向结构PROCESSENTRY32的指针,PROCESSENTRY32结构可对进程作一个较为全面的描述,其定义如下:
      typedef struct tagPROCESSENTRY32 {
      DWORD dwSize; // 结构大小;
      DWORD cntUsage; // 此进程的引用计数;
      DWORD th32ProcessID; // 进程ID;
      DWORD th32DefaultHeapID; // 进程默认堆ID;
      DWORD th32ModuleID; // 进程模块ID;
      DWORD cntThreads; // 此进程开启的线程计数;
      DWORD th32ParentProcessID; // 父进程ID;
      LONG pcPriClassBase; // 线程优先权;
      DWORD dwFlags; // 保留;
      char szExeFile[MAX_PATH]; // 进程全名;
      } PROCESSENTRY32;
    以上三个API函数均在头文件tlhelp32.h中声明,运行时需要有kernel32.lib库的支持。通过这三个函数可以枚举出当前系统已开启的所有进程,并可获取到进程的各相关信息。
       
例子:
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
int main( )
{
// 现在我们将利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照
//这个函数返回包含正在运行进程的快照句柄。
//他的原形是:
// HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);
// 我们将dwFlags设为TH32CS_SNAPPROCESS,th32ProcessID置为0。
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//现在我们获得了所有进程的信息。
//将从hSnapShot中抽取数据到一个PROCESSENTRY32结构中
//这个结构代表了一个进程,是ToolHelp32 API的一部分。
//抽取数据靠Process32First()和Process32Next()这两个函数。

//这里我们仅用Process32Next(),他的原形是:
//BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
//我们程序的代码中加入:
PROCESSENTRY32* processInfo=new PROCESSENTRY32;
// 必须设置PROCESSENTRY32的dwSize成员的值 ;
processInfo->dwSize=sizeof(PROCESSENTRY32);
int index=0;
//这里我们将快照句柄和PROCESSENTRY32结构传给Process32Next()。
//执行之后,PROCESSENTRY32 结构将获得进程的信息。我们循环遍历,直到函数返回FALSE。
printf("****************开始列举进程****************/n");
while(Process32Next(hSnapShot,processInfo)!=FALSE)
{
index++;
printf("****************** %d ******************/n",index);
printf("PID       Name      Current Threads/n");
printf("%-15d%-25s%-4d/n",processInfo->th32ProcessID,processInfo->szExeFile,processInfo->cntThreads);
}
CloseHandle(hSnapShot);
printf("****************进程列举结束****************/n");

int processID;
HANDLE hProcess;
printf("Enter Process ID to terminate that process:");
scanf("%d",&processID);
// 现在我们用函数 TerminateProcess()终止进程:
// 这里我们用PROCESS_ALL_ACCESS
hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,processID);
if(hProcess==NULL)
{
printf("Unable to get handle of process: ");
printf("Error is: %d",GetLastError());
}
TerminateProcess(hProcess,0);
delete processInfo;
return 0;
}

枚举进程(CreateToolhelp32Snapshot函数剖析) 之前写过一些枚举进程的代码,这两天正在回顾之前学习的代码,看到了CreateToolhelp32Snapshot函数,就顺便来看看它的具体实现吧。 实现枚举进程信息的这个过程看起来是比较easy的,只不过是一些Windows的API函数罢了: CreateToolhelp32Snapshot Process32First Process32Next 就利用这三个函数,便可实现当前系统进程的枚举... 阅读详情

相关推荐

CreateToolhelp32Snapshot Process32First Process32Next

CreateToolhelp32Snapshot Process32First Process32Next

CreateToolhelp32Snapshot

CreateToolhelp32Snapshot   CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。   HANDLE WINAPI CreateToolhelp32Snapshot(   DWORD dwFlags,   DWORD th32ProcessID   );   参数:   dwFlags   [输入]指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多

zen_z的专栏 1301

VB调用系统API函数---CreateToolhelp32Snapshot函数.pdf

VB调用系统API函数---CreateToolhelp32Snapshot函数.pdf

【dbt】使用snapshot快照生成拉链表

在做数仓开发时,为了保存缓慢变化维度的历史信息,需要用到拉链表。以下是使用 dbt——数据加工大师的 snapshot 生成拉链表的办法。

auzurdragon的博客 570

倍福ADS通讯协议深度解析——从握手到数据包的完整旅程

本文以工程师视角,通过Wireshark抓包实战,深度解析了倍福ADS通讯协议的完整工作流程。从TCP三次握手建立连接,到拆解AMS/TCP信封、AMS Header地址与命令解析,再到ADS Data读写请求的载荷构成,完整呈现了一次数据通讯的“旅程”。文章重点剖析了协议包格式,并结合实际案例,提供了基于协议分析的故障排查思路,帮助开发者深入理解并精准调试工业自动化系统通讯。

weixin_29231725的博客 151

从零到一:手把手教你用HFSS仿真60GHz圆极化磁电偶极子天线(附参数调优心得)

本文详细介绍了在HFSS中设计60GHz圆极化磁电偶极子天线的全流程,包括仿真环境搭建、参数化建模、收敛性优化和性能验证。通过系统化的参数扫描和优化策略,显著提升了天线的轴比带宽和增益性能,为毫米波通信应用提供了高效的天线设计解决方案。

weixin_42614269的博客 311

CreateToolhelp32Snapshot函数

CreateToolhelp32Snapshot CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。说到底,可以获取系统中正在运行的进程信息,线程信息,等。 原型:HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, //

胸怀世界 1万+

【数字图像相关-OpenCorr学习笔记】Epipolar search原理+代码解析

OpenCorr是一个开源C++库,用于研究和开发数字图像相关(DIC)技术它提供了2D和立体声DIC的全功能模块,以及数字体积相关(DVC)。最近正在学习OpenCorr,为了更深层次地理解ICGN,我打算浅浅剖析Opencorr的代码,学习的过程中写下这篇学习笔记,以后忘记了还能回来看看。同时,作为一名在读研究生,希望能得到社区大佬的指点,以及跟同学们一起学习进步。这一期主要讲解Eipipolar search的原理,并且附上部分代码解析。

ywyywyy的博客 1356

函数说明(CreateToolhelp32Snapshot) 08.10.31

CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。  HANDLE WINAPI CreateToolhelp32Snapshot(  DWORD dwFlags,  DWORD th32ProcessID  );  参数:  dwFlags  [输入

commonness 733

基于PCL的电力线点云提取与分割实现

本文基于PCL库实现电力线点云提取与分割,包含6个核心处理阶段:文件读取与结果文件夹创建、高程滤波分割候选点云、欧式聚类去噪、电力线分段提取、球形邻域搜索补全点云、最终分割与可视化保存。通过PCA计算点云线性特征(阈值0.91)筛选电力线点,采用欧式聚类(容忍度3.0)去除噪点,并针对不同规模聚类差异化设置球形搜索半径(4.0/6.0)补全点云。最终通过欧式聚类分割并可视化带颜色点云。算法对高程滤波阈值、聚类参数等具有敏感性,需根据点云特性调整优化。

weixin_45196569的博客 192

11.Labview实现用户界面切换的几种方式---通过VI间相互调用

本文介绍了界面切换的几种方式,分别是重入和引用①重入方式可以通过调用子VI的方式打开被调用的界面,往往应用于弹窗等的设置程序。②引用方式分两种,一种是打开引用,一种是静态引用。区别在于打开引用需要设置被打开VI的目标地址,静态引用仅需在引用时绑定VI的位置即可。③推荐使用静态引用的方式切换界面。④使用引用打开界面时,需通过属性节点和调用节点来设置程序的状态。更多内容欢迎大家补充和留言讨论~本文介绍了GUI界面设计相关的程序,更多相关文章后续持续更新,请关注作者不迷路~本期就到这里,再见~

关注我,更多技术问题欢迎私聊~ 9546

CreateToolHelp32Snapshot函数获取系统快照

系统为我们在内存中指定了一个关于进程、线程、堆和模块等的当前状态信息副本-----系统快照,我们可以通过CreateToolHelp32Snapshot函数来获取系统快照的句柄,通过该句柄来获取当前状态信息。该函数如下: HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID

无语的阿辉 4365

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3072

CreateToolhelp32Snapshot 函数作用,用法

CreateToolhelp32Snapshot 函数通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照. 说到底,可以获取系统中正在运行的进程信息,线程信息,等 函数原型: HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPR...

qq_42503022的博客 4149

基于Simulink的电气弹簧ES稳压控制模型仿真

在本文中,我们将使用Simulink建立一个ES稳压控制系统的模型,并通过仿真验证其性能。接下来,我们配置了各个组件的参数,包括电源电压、负载电流以及ES和控制器的传递函数。通过调整模型中的参数和控制算法,我们可以进一步优化系统的性能并实现更好的电压稳定调节。该系统通过对电力系统中的ES进行控制,调整其阻尼特性,以实现对电压的稳定调节。例如,我们可以设置电源的电压值、负载的电流值,以及控制器的参数(如PID控制器的比例、积分和微分增益)。反馈控制可以根据测量值来调整控制器的输出,从而实现对电压的稳定调节。

DevProZ的博客 421

RHCA II之路---EX442-10

这题比较耗时,可以多开2个窗口让他跑起来后先做后面的题目。

Q先生 585

进程遍历-CreateToolhelp32Snapshot系统快照

​ th32ProcessID 为 0 遍历当前程序,不为0则创建指定进程的快照进行遍历。​ lppe 指向 PROCESSENTRY32 结构的指针,它包含进程信息。​ lppe 指向 PROCESSENTRY32 结构的指针,它包含进程信息。​ 描述采用快照时驻留在系统地址空间中的进程的列表中的条目。​ 获取指定进程以及这些进程使用的堆、模块和线程的快照。​ dwFlags 指出在快照中要包含的系统部分。​ 检索有关系统快照中遇到的第一个进程的信息。​ 检索有关系统快照中记录的下一个进程的信息。

hide_in_darkness的博客 1038

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PROCESSENTRY32结构体 CreateToolhelp32Snapshot Process32First 和Process32Next

PROCESSENTRY32结构体 typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads

寻梦&之璐 2417

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

CreateToolhelp32Snapshot枚举进程

CreateToolhelp32Snapshot枚举进程

yrryyff的博客 789

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

易语言进程快照遍历:从CreateToolhelp32Snapshot到进程ID精准获取

本文详细介绍了易语言中如何使用`CreateToolhelp32Snapshot`等Windows API函数实现进程快照遍历,精准获取进程ID。通过实战技巧、错误处理与资源释放方案,帮助开发者高效完成进程监控、自动化工具开发等任务,特别适合系统编程和游戏辅助开发场景。

chubaisheng8627的博客 411

CreateToolhelp32Snapshot详解

HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ); dwFlags: TH32CS_INHERIT :使用这个标志表示,这个快照句柄是可继承的TH32CS_SNAPALL :表示使用了以下的全部标志,总共四个TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODU

baidu_25539425的博客 1万+
上一篇: 何时调用DllMain
下一篇: 全局钩子DLL如何被挂接到其它进程地址空间中并正确映射函数
tomorrowsprogress
博客等级 码龄20年 16粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值