CreateToolhelp32Snapshot

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

 

  HANDLE WINAPI CreateToolhelp32Snapshot(

 

  DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等

 

  DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取当前进程快照时可以设为0

 

  );

 

  参数:

 

  dwFlags

 

  [输入]指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。

 

  TH32CS_INHERIT - 声明快照句柄是可继承的。

 

  TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。

 

  TH32CS_SNAPHEAPLIST - 在快照中包含在th32ProcessID中指定的进程的所有的堆。

 

  TH32CS_SNAPMODULE - 在快照中包含在th32ProcessID中指定的进程的所有的模块。

 

  TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。

 

  TH32CS_SNAPTHREAD - 在快照中包含系统中所有的线程。

 

  Const TH32CS_SNAPHEAPLIST = &H1

 

  Const TH32CS_SNAPPROCESS = &H2

 

  Const TH32CS_SNAPTHREAD = &H4

 

  Const TH32CS_SNAPMODULE = &H8

 

  Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)

 

  Const TH32CS_INHERIT = &H80000000

 

  th32ProcessID

 

  [输入]指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。

 

  返回值:

 

  调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE 。

 

  备注:

 

  使用GetLastError函数查找该函数产生的错误状态码。

 

  注意,在Win NT中,要删除快照,使用CloseHandle函数;在Win CE中,要删除快照,使用CloseToolhelp32Snapshot函数。

 
C++例子:

 

  #include "StdAfx.h"

 

  #include "windows.h"

 

  #include "tlhelp32.h"

 

  #include "stdio.h"

 

  int main(int argc, char* argv[])

 

  {

 

  PROCESSENTRY32 pe32;

 

  //在使用这个结构前,先设置它的大小

 

  pe32.dwSize = sizeof(pe32);

 

  //给系统内所有的进程拍个快照

 

  HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

 

  if (hProcessSnap == INVALID_HANDLE_VALUE)

 

  {

 

  printf("CreateToolhelp32Snapshot 调用失败.\n");

 

  return -1;

 

  }

 

  //遍历进程快照,轮流显示每个进程的信息

 

  BOOL bMore = ::Process32First(hProcessSnap,&pe32);

 

  while (bMore)

 

  {

 

  printf("进程名称:%s\n",pe32.szExeFile);

 

  printf("进程ID:%u\n\n",pe32.th32ProcessID);

 

  bMore = ::Process32Next(hProcessSnap,&pe32);

 

  }

 

  //不要忘记清除掉snapshot对象

 

  ::CloseHandle(hProcessSnap);

 

  return 0;

 

  }

最后注:该函数在头文件 tlhelp32.h 中声明,因此需要添加头文件信息。

CreateToolhelp32Snapshot的更多相关文章

  1. Delphi判断进程是否存在(使用CreateToolhelp32Snapshot)

      program Project2; uses windows,TLHelp32; function FindProcess(AFileName:string):boolean; var hSnap ...

  2. Windows API 之 CreateToolhelp32Snapshot

    CreateToolhelp32Snapshot: 参考: https://msdn.microsoft.com/en-us/library/ms682489%28VS.85%29.aspx HAND ...

  3. 【API】检查进程是否存在 - CreateToolhelp32Snapshot

    1 学习目标 今天静态逆向mydocument病毒时,看到病毒代码为了防止自身被调试会先检测杀毒软件和调试工具的进程是否存在.如果没有杀毒软件则释放真正的病毒文件,提前熟悉一下枚举进程的反汇编代码. ...

  4. CreateToolhelp32Snapshot 以及 EnumProcesses

    RT,请教如何获得Windows任务管理器中所显示的进程列表. CreateToolhelp32Snapshot 以及 EnumProcesses 这些方法我都试过了,但是这两种方法得到的结果和任务管 ...

  5. WINDOWS API ——CREATETOOLHELP32SNAPSHOT——查找进程

    原文:http://www.cnblogs.com/wind-net/archive/2012/10/26/2741458.html //根据进程名获取进程ID DWORD GetPidByProce ...

  6. 枚举进程,线程,堆 CreateToolhelp32Snapshot

    Takes a snapshot of the processes and the heaps, modules, and threads used by the processes.对当前系统进行一 ...

  7. 《Walking the callstack(转载)》

    本文转载自:https://www.codeproject.com/articles/11132/walking-the-callstack Download demo project with so ...

  8. 获取系统中所有进程&线程信息

    读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...

  9. win32进程名查找进程PID

    1. #include <Psapi.h> #pragma comment(lib, "Psapi.lib") DWORD GetProcIDFromName(LPCT ...

随机推荐

  1. linux time命令参数--执行命令并计时

    [命令]time — 执行命令并计时 [格式]time [-p] command [arguments...] [说明] 执行命令行"command [arguments...]" ...

  2. error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7

    工程使用了DirectDraw,编译出错 error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7 解决办法是吧dxguid.lib添加到工程中,把lib所在目录添加到工程 ...

  3. 2015北京网络赛B题 Mission Impossible 6

    借用大牛的一张图片:模拟 #include<cstdio> #include<cmath> #include<cstring> #include<algori ...

  4. POJ 1113&&HDU 1348

    题意:凸包周长+一个完整的圆周长.因为走一圈,经过拐点时,所形成的扇形的内角和是360度,故一个完整的圆. 模板题,之前写的Graham模板不对,WR了很多发....POJ上的AC代码 #includ ...

  5. 稀疏表示(sparse representation)和字典学习

    近十几年来,稀疏(sparsity)已经成为信号处理及其应用领域中处于第一位的概念之一.近来,研究人员又致力于过完备(overcomplete)信号表示的研究.这种表示不同于许多传统的表示.因为它能提 ...

  6. Sitecore Digital Marketing System, Part 1: Creating personalized, custom content for site visitors(自定义SiteCore中的 Item的Personalize的Condition) -摘自网络

    Sitecore’s Digital Marketing System (DMS) can help you personalize the content your site displays to ...

  7. 我是如何理解Java抽象类和接口的

    在面试中我们经常被问到:Java中抽象类和接口的区别是什么? 然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦:一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好 ...

  8. hdoj 1799 循环多少次?

    循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  9. 转载Code First Migrations更新数据库架构的具体步骤

    [转载] Code First Migrations更新数据库结构的具体步骤 我对 CodeFirst 的理解,与之对应的有 ModelFirst与  DatabaseFirst ,三者各有千秋,依项 ...

  10. oracle表数据误删还原

    首先,找到数据删除前的一个时间点. select timestamp_to_scn(to_timestamp('2013-10-12 8:30:00', 'YYYY-MM-DD HH24:MI:SS' ...