系统的快照
快照是工具帮助函数的核心。 快照是位于系统内存中的一个或多个列表的当前状态的只读副本:进程、线程、模块和堆。
使用工具的过程可帮助函数从快照而不是直接从作系统访问这些列表。 启动和结束进程时,系统内存中的列表会更改、创建和销毁线程、从系统内存中加载和卸载可执行模块,以及创建和销毁堆。 使用快照中的信息可防止不一致。 否则,对列表的更改可能会导致线程错误地遍历列表或导致访问冲突(GP 错误)。 例如,如果应用程序在其他线程创建或终止时遍历线程列表,则应用程序用于遍历线程列表的信息可能已过时,并可能导致应用程序遍历列表时出错。
若要拍摄系统内存的快照,请使用 CreateToolhelp32Snapshot 函数。 调用此函数时,可以通过指定以下一个或多个值来控制快照的内容:
- TH32CS_SNAPHEAPLIST
- TH32CS_SNAPMODULE
- TH32CS_SNAPPROCESS
- TH32CS_SNAPTHREAD
TH32CS_SNAPHEAPLIST 和 TH32CS_SNAPMODULE 值特定于进程。 指定这些值后,指定进程的堆和模块列表将包含在快照中。 如果将零指定为进程标识符,则使用当前进程。 即使进程标识符传递到 CreateToolhelp32Snapshot,TH32CS_SNAPTHREAD 值也会始终创建系统范围的快照。
若要枚举所有进程的堆或模块状态,请指定当前进程的 TH32CS_SNAPALL 值和进程标识符。 然后,对于快照中的每个附加进程,请再次调用 CreateToolhelp32Snapshot,并指定其进程标识符和 TH32CS_SNAPHEAPLIST 或 TH32CS_SNAPMODULE 值。
可以使用 GetLastError 函数检索 CreateToolhelp32Snapshot 的扩展错误状态代码。
当进程使用完快照时,请使用 closeHandle函数将其销毁。 如果不销毁快照,进程将泄漏内存,直到它退出,此时系统回收内存。
注意
快照句柄的作用与文件句柄类似,并且遵循与可以使用它的进程和线程相同的规则。 若要指定句柄是可继承的,请使用 TH32CS_INHERIT 值创建快照。
相关主题