系统的快照

快照是工具帮助函数的核心。 快照是驻留在系统内存中的一个或多个列表的当前状态的只读副本:进程、线程、模块和堆。

使用工具的流程可帮助函数从快照访问这些列表,而不是直接从操作系统访问这些列表。 启动和结束进程时,系统内存中的列表会更改、创建和销毁线程、从系统内存中加载和卸载可执行模块,并创建和销毁堆。 使用快照中的信息可防止不一致。 否则,对列表的更改可能会导致线程错误遍历列表或导致访问冲突 (GP 错误) 。 例如,如果应用程序在创建或终止其他线程时遍历线程列表,则应用程序用于遍历线程列表的信息可能已过时,并可能导致应用程序遍历列表时出错。

若要拍摄系统内存的快照,请使用 CreateToolhelp32Snapshot 函数。 可以通过在调用此函数时指定以下一个或多个值来控制快照的内容:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

TH32CS_SNAPHEAPLISTTH32CS_SNAPMODULE值特定于进程。 指定这些值时,指定进程的堆和模块列表将包含在快照中。 如果将零指定为进程标识符,则使用当前进程。 即使进程标识符传递给 CreateToolhelp32SnapshotTH32CS_SNAPTHREAD值也会始终创建系统范围的快照。

若要枚举所有进程的堆或模块状态,请指定 当前进程的TH32CS_SNAPALL 值和进程标识符。 然后,对于快照中的每个附加进程,请再次调用 CreateToolhelp32Snapshot ,并指定其进程标识符和 TH32CS_SNAPHEAPLISTTH32CS_SNAPMODULE 值。

可以使用 GetLastError 函数检索 CreateToolhelp32Snapshot 的扩展错误状态代码。

当进程使用快照完成时,请使用 CloseHandle 函数销毁它。 如果不销毁快照,进程将泄漏内存,直到它退出,此时系统回收内存。

注意

快照句柄就像文件句柄一样,并且遵循有关可以使用它的进程和线程的相同规则。 若要指定句柄是可继承的,请使用 TH32CS_INHERIT 值创建快照。

 

创建快照和查看过程