Partager via


Captures instantanées du système

Les instantanés sont au cœur des fonctions d’aide de l’outil. Une instantané est une copie en lecture seule de l’état actuel d’une ou plusieurs des listes suivantes qui résident dans la mémoire système : processus, threads, modules et tas.

Les processus qui utilisent l’outil aident les fonctions à accéder à ces listes à partir d’instantanés plutôt que directement à partir du système d’exploitation. Les listes de la mémoire système changent lorsque les processus sont démarrés et terminés, que les threads sont créés et détruits, que les modules exécutables sont chargés et déchargés de la mémoire système et que les tas sont créés et détruits. L’utilisation d’informations provenant d’un instantané empêche les incohérences. Dans le cas contraire, les modifications apportées à une liste pourraient entraîner une traversée incorrecte d’un thread ou provoquer une violation d’accès (erreur de stratégie de groupe). Par exemple, si une application parcourt la liste de threads pendant que d’autres threads sont créés ou arrêtés, les informations que l’application utilise pour parcourir la liste de threads peuvent devenir obsolètes et entraîner une erreur pour l’application qui traverse la liste.

Pour prendre une instantané de la mémoire système, utilisez la fonction CreateToolhelp32Snapshot. Vous pouvez contrôler le contenu d’un instantané en spécifiant une ou plusieurs des valeurs suivantes lors de l’appel de cette fonction :

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

Les valeurs TH32CS_SNAPHEAPLIST et TH32CS_SNAPMODULE sont spécifiques au processus. Lorsque ces valeurs sont spécifiées, les listes de tas et de modules du processus spécifié sont incluses dans le instantané. Si vous spécifiez zéro comme identificateur de processus, le processus actuel est utilisé. La valeur TH32CS_SNAPTHREAD crée toujours une instantané à l’échelle du système, même si un identificateur de processus est passé à CreateToolhelp32Snapshot.

Pour énumérer l’état du tas ou du module pour tous les processus, spécifiez la valeur TH32CS_SNAPALL et l’identificateur du processus en cours. Ensuite, pour chaque processus supplémentaire dans le instantané, appelez à nouveau CreateToolhelp32Snapshot, en spécifiant son identificateur de processus et la valeur TH32CS_SNAPHEAPLIST ou TH32CS_SNAPMODULE.

Vous pouvez récupérer une erreur étendue status code pour CreateToolhelp32Snapshot à l’aide de la fonction GetLastError.

Lorsque votre processus se termine à l’aide d’un instantané, détruisez-le à l’aide de la fonction CloseHandle. Si vous ne détruisez pas un instantané, le processus fuit la mémoire jusqu’à ce qu’il se ferme, à laquelle le système récupère la mémoire.

Notes

Le instantané handle agit comme un handle de fichier et est soumis aux mêmes règles concernant les processus et les threads dans lesquels il peut être utilisé. Pour spécifier que le handle peut être hérité, créez le instantané à l’aide de la valeur TH32CS_INHERIT.

 

Prise d’un instantané et affichage des processus