Toolhelp APIs(tlhelp32.h)是Windows中一组能够方便得到系统中win32应用程序的当前运行状况的函数,这些函数设计目的是实现一些基于Win32子系统的工具,特别是调试器。通过使用Toolhelp API,我们可以实现象Windows附带的系统工具Dr watson一样的功能(当然真正实现它的所有功能不是光靠Toolhelp API一个函数库就可以的)。而且这些函数适用于win9x,winnt,win2k,所以不需要为在不同的windows版本中移植代码操心。
下面将介绍ToolHelp APIs中一些主要的函数和结构。主要有CreateToolhelp32Snapshot和Xxx32First,Xxx32Next系列函数,还有Toolhelp32ReadProcessMemory。所用语言为Object Pascal,对于使用C++的程序员可以参考SDK index中的tool help library [Win32].
以下是它们的定义和说明:
1. 创建快照函数CreateToolhelp32Snapshot
function CreateToolhelp32Snapshot(
dwFlags:DWORD, // 要得到进程的信息,赋为TH32CS_SNAPPROCESS
// 要得到线程的信息,赋为TH32CS_SNAPTHREAD
// 要得到指定进程的堆列表,赋为TH32CS_SNAPHEAPLIST
// 要得到指定进程的模块列表,赋为TH32CS_SNAPMODULE
th32ProcessID: DWORD // 当我们把dwFlags赋为TH32CS_SNAPMODULE 或者
// TH32CS_SNAPHEAPLIST时,需要指定具体的进程ID,否则
// 将忽略此参数。把它赋为0表示当前进程(也就是自己)
): THandle; // 返回值THandle将在以后要枚举进程、线程等对象时使用
当我们得到快照的句柄后可以分别使用Xxx32First,Xxx32Next这些函数进行对象枚举。
它们的定义如下所示:
2. Xxx32First,Xxx32Next枚举函数与有关结构
l 进程有关的函数与结构
tagPROCESSENTRY32 = packed record
dwSize: DWORD; // 指定结构的大小,
// 在调用Process32First前需要设置,否则将会失败
cntUsage: DWORD; // 引用计数
th32ProcessID: DWORD; // 进程号
th32De