Captures instantanées du système
Les instantanés sont au cœur des fonctions d’aide de l’outil. Un 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 de captures instantanées plutôt que directement à partir du système d’exploitation. Les listes de modifications de mémoire système lorsque les processus sont démarrés et terminés, les threads sont créés et détruits, les modules exécutables sont chargés et déchargés à partir de la mémoire système, et les tas sont créés et détruits. L’utilisation des informations d’un instantané empêche les incohérences. Dans le cas contraire, les modifications apportées à une liste pourraient entraîner une mauvaise traversée de la liste par un thread ou provoquer une violation d’accès (erreur de stratégie de groupe). Par exemple, si une application traverse la liste des threads pendant que d’autres threads sont créés ou arrêtés, les informations que l’application utilise pour parcourir la liste des threads peuvent devenir obsolètes et peuvent entraîner une erreur pour l’application qui traverse la liste.
Pour prendre un 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 segments et de modules du processus spécifié sont incluses dans l’instantané. Si vous spécifiez zéro comme identificateur de processus, le processus actuel est utilisé. La valeur TH32CS_SNAPTHREAD crée toujours un 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 de processus du processus actuel. Ensuite, pour chaque processus supplémentaire dans l’instantané, appelez CreateToolhelp32Snapshot à nouveau, en spécifiant son identificateur de processus et la valeur TH32CS_SNAPHEAPLIST ou TH32CS_SNAPMODULE.
Vous pouvez récupérer un code d’état d’erreur étendu pour CreateToolhelp32Snapshot à l’aide de la fonction GetLastError.
Une fois votre processus terminé à l’aide d’un instantané, détruisez-le à l’aide de la fonction CloseHandle. Si vous ne détruisez pas d’instantané, le processus va fuiter de la mémoire jusqu’à ce qu’elle se termine, au moment où le système récupère la mémoire.
Note
Le handle d’instantané 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 est hérité, créez l’instantané à l’aide de la valeur TH32CS_INHERIT.
Rubriques connexes