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;