首页 > 代码库 > CreateToolHelp32Snapshot

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;

CreateToolHelp32Snapshot