CreateToolHelp32Snapshot

CreatToolHelp32Snapshot可以为指定进程、进程使用的堆、模块、线程建立一个快照。

函数有两个参数,第一个用来指定快照中需要返回的对象,可以为以下值:

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

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

TH32CS_SNAPHEAPLIST

TH32CS_SNAPPROCESS

TH32CS_SNAPMOUDLE

TH32CS_SNAPTHREAD

第二个参数指定将要快照的进程ID,如果该参数为0表示快照为当前进程,该参数只有在设置TH32CS_SNAPHEAPLIST或者

TH32CS_SAMPMOUDLE时才生效,在其他情况下该参数被忽略,所有的进程都会被快照。

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

typedef struct tagPROCESSENTRY32
{
DWORD dwSize;    // 结构大小
DWORD cntUsage;  // 此进程的引用计数
DWORD th32ProcessID; 
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID; 
DWORD cntThreads;
DWORD th32ParentProcessID; 
LONG pcPriClassBase; // 线程优先权
DWORD dwFlags;   // 保留
CHAR szExeFile[MAX_PATH]; // 进程全名
} PROCESSENTRY32;

typedef struct tagTHREADENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ThreadID; // this thread
DWORD th32OwnerProcessID; // Process this thread is associated with
LONG tpBasePri;
LONG tpDeltaPri;
DWORD dwFlags;
} THREADENTRY32;

typedef struct tagHEAPENTRY32
{
SIZE_T dwSize;
HANDLE hHandle; // Handle of this heap block
ULONG_PTR dwAddress; // Linear address of start of block
SIZE_T dwBlockSize; // Size of block in bytes
DWORD dwFlags;
DWORD dwLockCount;
DWORD dwResvd;  // reserved 预订保留
DWORD th32ProcessID; // owning process
ULONG_PTR th32HeapID; // heap block is in
} HEAPENTRY32;

typedef struct tagMODULEENTRY32
{
DWORD dwSize;
DWORD th32ModuleID; // This module
DWORD th32ProcessID; // owning process
DWORD GlblcntUsage; // Global usage count on the module
DWORD ProccntUsage; // Module usage count in th32ProcessID‘s context
BYTE * modBaseAddr; // Base address of module in th32ProcessID‘s context
DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr
HMODULE hModule; // The hModule of this module in th32ProcessID‘s context
char szModule[MAX_MODULE_NAME32 + 1];
char szExePath[MAX_PATH];
} MODULEENTRY32;

时间: 2024-10-03 13:38:52

CreateToolHelp32Snapshot的相关文章

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

[html] view plain copy program Project2; uses windows,TLHelp32; function FindProcess(AFileName:string):boolean; var hSnapshot:THandle; lppe:TProcessEntry32; Found:Boolean; begin Result:=False; hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)

获取 window任务栏已经打开应用程序窗口(也就是任务管理器中前台进程)的图标

获取 window任务栏已经打开应用程序窗口(也就是任务管理器中前台进程)的图标 1.功能描述 获取到window任务栏已经打开的应用程序的窗口图标.如下:(要获取到QQ,浏览器,文件夹的图标,但是任务栏中隐藏的图标不显示) 2.使用技术及工具 JAVA,JNA,eclipse. 需要去下载JNA的包(一个是jna.jar,一个时jna-platform.jar):包的下载在文章结尾提供地址. 3.实现思路 (1).一个window任务栏打开的应用程序也就是一个前台进程,所以先通过JNA获取所有

【转】《windows核心编程》读书笔记

这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯. 海量细节. 第1章    错误处理 1.         GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖. 2.         GetLastError可能用于描述成功的原因(CreatEvent)

NMVL查询显卡信息

前段时间做英伟达硬解得时候,显卡总是莫名挂掉,后来发现是因为显卡温度过高掉了.这几天找到CUDA中有NVML工具可以查看显卡信息,nvidia-smi也是基于这个工具包. 使用的CUDA版本为CUDA 8.0 . 1.给程序添加NVML 安装CUDA之后可以找到如下: 图1.NVML的例子 这里面包含的是NVML的一个例子.我的系统是64位的,可以找到NVML的lib和头文件如下: 图2.NVML的lib文件 图3.NVML头文件 在工程中包含NVML.我是新建的CUDA 8.0 Runtime

第二例:查看进程程序

如第一例,不赘言. 代码如下: 1 #include<windows.h> 2 #include<stdio.h> 3 #include<tlhelp32.h> 4 5 int main(int argc,char* argv[]) 6 { 7 PROCESSENTRY32 pe32; 8 pe32.dwSize = sizeof(pe32); 9 HANDLE hProcesshandle = ::CreateToolhelp32Snapshot(TH32CS_SNA

第四例:修改游戏内存

当然这个在书上已经有了很多的解释,今天也太晚了,所以不再赘述,直接贴代码了. 我的和书上的是不大一样的,这个是你可以输入你想要修改的程序名称,之后查找值,最后修改. 如下: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<windows.h> 5 #include<tlhelp32.h> 6 7 //预定义区 8 #define ONEPAGE 40

C++结束进程 并能显示其父进程

声明:有些网友有可能在CSDN博客上看到过相同的文章,因为本人有两个账号...请不要误会,均为原创 这个程序功能强大哦~~ #include <cstdio> #include <windows.h> #include <winbase.h> #include <wtypes.h> #include <tlhelp32.h> #include <psapi.h> #include <tchar.h> #include &l

进程序名得到进程ID和句柄与进程的公司名(使用快照和GetPeFileCompany和VerQueryValueW等函数)

WORD  GetProcessIdByName(WCHAR *processName){ DWORD processId = 0;HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);if(hProcessSnap==INVALID_HANDLE_VALUE){return 0;} PROCESSENTRY32 pe32;pe32.dwSize = sizeof(PROCESSENTRY32); BOOL bMor

内存 分析

PBYTE pFile2;//设置为全局,方便其他cpp访问 void CDLG_Process::AnalysisPFile() { //获取行列内容 DWORD dwPid; CString Pid = m_ctrlList_Process.GetItemText(row, 0); dwPid = _ttoi(Pid.GetBuffer());//_ttoi String->int Pid.ReleaseBuffer(); //获取第一个模块信息 HANDLE hModuleSnap = I