Udostępnij za pośrednictwem


Migawki systemu

Migawki są podstawą funkcji pomocy narzędzia. Migawka to kopia tylko do odczytu bieżącego stanu co najmniej jednej z następujących list, które znajdują się w pamięci systemowej: procesy, wątki, moduły i sterta.

Procesy korzystające z narzędzia pomagają funkcjom uzyskiwać dostęp do tych list z migawek zamiast bezpośrednio z systemu operacyjnego. Listy w pamięci systemowej zmieniają się podczas uruchamiania i kończenia procesów, wątki są tworzone i niszczone, moduły wykonywalne są ładowane i zwalniane z pamięci systemowej, a sterty są tworzone i niszczone. Użycie informacji z migawki zapobiega niespójnościom. W przeciwnym razie zmiany na liście mogą spowodować niepoprawne przejście wątku do listy lub spowodować naruszenie dostępu (błąd gp). Jeśli na przykład aplikacja przechodzi przez listę wątków podczas tworzenia lub przerywania innych wątków, informacje używane przez aplikację do przechodzenia przez listę wątków mogą stać się nieaktualne i mogą spowodować błąd podczas przechodzenia przez aplikację przez listę.

Aby utworzyć migawkę pamięci systemowej, użyj funkcji CreateToolhelp32Snapshot. Zawartość migawki można kontrolować, określając co najmniej jedną z następujących wartości podczas wywoływania tej funkcji:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

Wartości TH32CS_SNAPHEAPLIST i TH32CS_SNAPMODULE są specyficzne dla procesu. Po określeniu tych wartości sterta i listy modułów określonego procesu znajdują się w migawce. Jeśli określisz zero jako identyfikator procesu, używany jest bieżący proces. Wartość TH32CS_SNAPTHREAD zawsze tworzy migawkę dla całego systemu, nawet jeśli identyfikator procesu jest przekazywany do CreateToolhelp32Snapshot.

Aby wyliczyć stan stertu lub modułu dla wszystkich procesów, określ wartość TH32CS_SNAPALL i identyfikator procesu bieżącego procesu. Następnie dla każdego dodatkowego procesu w migawce wywołaj CreateToolhelp32Snapshot ponownie, określając identyfikator procesu i wartość TH32CS_SNAPHEAPLIST lub TH32CS_SNAPMODULE.

Możesz pobrać kod stanu błędu rozszerzonego dla CreateToolhelp32Snapshot przy użyciu funkcji GetLastError.

Po zakończeniu procesu przy użyciu migawki należy ją zniszczyć przy użyciu funkcji CloseHandle. Jeśli migawka nie zostanie zniszczona, proces będzie wyciekać pamięć, dopóki nie zakończy się, w którym czasie system odzyska pamięć.

Nuta

Dojście migawki działa jak dojście do pliku i podlega tym samym regułom dotyczącym procesów i wątków, w których można go używać. Aby określić, że uchwyt jest dziedziczony, utwórz migawkę przy użyciu wartości TH32CS_INHERIT.

 

tworzenie migawek i wyświetlanie procesów