LABORATORIUM: 08, 09 i 10
Procmon.exe – program
pozwalający na obserwacje działania procesu w zakresie: rejestru, systemu
plików, sieci, wątków i procesów, zasobów (profilowanie).
Wątek – jednostka dla której system przydziela czas procesora. Kontekst wątku składa się z:
licznika rozkazów, stanu rejestrów, stosu (ale nie sterty!).
Proces – jest obiektem dostarczającym wątkowi przestrzeni adresowej. Każdy proces ma co
najmniej jeden wątek. Proces nie wykonuje kodu, kod zawarty w przestrzeni adresowej
procesu jest wykonywany przez wątek.
Zdarzenie – każdy oczekujący wątek widzi zdarzenie jako pewną dwustanową flagę:
zdarzenie jest zgłoszone albo odwołane.
GŁÓWNE ZAKŁADKI PROGRAMU PROCMON.EXE
Show Registry Activity - wyświetlenie aktywności rejestru.
Show File System Activity - Wyświetla aktywny system plików dla wszystkich systemów
plików, w tym pamięci lokalnej i zdalnych systemów plików.
Network - Wyświetla aktywność sieciową (aktywność protokołu TCP i UDP za pomocą
Event Tracing for Windows (ETW)).
Show Process and Thread Activity - Wyświetla wszystkie aktualne procesy systemowe oraz
tworzenie wątków i operacji wyjścia
Drzewo Procesów - procesów ukazuje się struktura podzielona na zagnieżdżone procesy tego
samego typu. Wyświetlone są informacje: m. in. ścieżka, komenda, użytkownik, PID itd.
Include Process from Window - zawężenie informacji do wskazanego procesu.
KARTY PROCESU
Event - wyświetla informacje dotyczące danego zdarzenia, np. klasę, wynik, trwanie, ścieżkę
dostępu, datę i godzinę powstania.
Process – wyświetla bardziej szczegółowe informacje dotyczące wybranego procesu, np.
identyfikator procesu, atrybuty wykonywania, linia komend itd.
Stack - przekazuje informacje o bibliotekach, np. informacje o ramce biblioteki, modułach,
lokacjach, adresach i ścieżkach.
PROCESY I WĄTKI – FUNKCJE
WinAPI - to zbiór niezbędnych funkcji, stałych i zmiennych umożliwiających działanie
programu w systemie operacyjnym Microsoft Windows.
CreateProcess – funkcja tworząca proces.
CreateThread – funkcja tworząca wątek.
GetCurrentProcess – funkcja kojarzy istniejący zasób z nowym procesem.
SetThreadPriority - funkcja ustawia poziom priorytetu bieżącego wątku w swojej klasie.
SetPriorityClass – funkcja ustawia klasę priorytetu dla procesu.
GetPriorityClass – funkcja pozwala sprawdzić klasę priorytetu procesu.
ResumeThread – funkcja wznawiająca uśpiony wątek.
SuspendThread – funkcja zawieszająca wątek.
ExitThread – funkcja kończąca działanie wątku.
TerminateThread – funkcja wymusza zakończenie wykonywania wątku.
GetExitCodeThread – funkcja zwracająca kod powrotu zakończonego wątku.
WaitForSingleObject – funkcja służąca do synchronizacji poprzez oczekiwania na
zakończenie działającego wątku. Oczekuje ona dwMilliseconds (należy wpisać wartość) na
zakończenie wątku.
CreateEvent – funkcja tworząca zdarzenie.
SetEvent – funkcja informująca system o zaistnieniu zdarzenia
OpenEvent – funkcja zwraca uchwyt istniejącego zdarzenia.
PulseEvent – funkcja ustawia zdarzenie w stan sygnalizowany, a następnie przedstawia je w
stan niesygnalizowany.
ResetEvent – funkcja resetuje zdarzenie (przestawia je w stan niesygnalizowany).
InitializeCriticalSection – funkcja inicjująca obiekt sekcji krytycznej.
EnterCriticalSection – funkcja czeka na uzyskanie wyłącznego dostępu do sekcji krytycznej.
LeaveCriticalSection – funkcja powodująca zrzeczenie się wyłącznego dostępu do sekcji
krytycznej.
TryEnterCriticalSection – funkcja czeka na uzyskanie wyłącznego dostępu do sekcji
krytycznej.
DeleteCriticalSection – funkcja zwalnia wszystkie zasoby używane przez sekcję krytyczną.
CreateMutex – funkcja tworzy nazwany lub nienazwany muteks i zwraca uchwyt dla niego.
RelaseMutex – funkcja zwalnia muteks.
WaitForMultipleObjects – funkcja czeka na ustawienie jednego lub wszystkich obiektów w
stan sygnalizowania.
CloseHandle – funkcja zamyka obiekt identyfikowany przez uchwyt.
MECHANIZMY SYNCHRONIZACJI WĄTKÓW
Mutex – obiekt służący do synchronizacji. Jego stan jest ustawiony jako „sygnalizowany”
kiedy żaden wątek nie sprawuje nad nim kontroli oraz „niesygnalizowany” kiedy jakiś wątek
sprawuje nad nim kontrolę.
Semafor – działa jak furtka kontrolująca ilość wątków wykonujących jakiś fragment kodu. Za
pomocą semaforów aplikacja może kontrolować na przykład maksymalną ilość otwartych
plików, czy utworzonych okien. Semafor w działaniu jest bardzo podobny do muteksu.
Sekcja krytyczna – najszybsza i najwydajniejsza metoda służąca do synchronizacji wątków.
Mechanizm sekcji krytycznej możliwy jest do wykorzystania tylko w obrębie jednego procesu
(synchronizacji wątków). Pozostałe metody (zdarzenia, semafory, muteksy itd.) mogą być
stosowane również dla wielu procesów.
KLASY PRIORYTETÓW PROCESÓW
REALTIME_PRIORITY_CLASS – czasu rzeczywistego
HIGH_PRIORITY_CLASS – wysoki
ABOVE_NORMAL_PRIORITY_CLASS – powyżej normalnego
NORMAL_PRIORITY_CLASS – normalny
BELOW_NORMAL_PRIORITY_CLASS – poniżej normalnego
IDLE_PRIORITY_CLASS – niski
PRIORYTETY WĄTKÓW
THREAD_PRIORITY_TIME_CRITICAL – krytyczny
THREAD_PRIORITY_HIGHEST – najlepszy
THREAD_PRIORITY_ABOVE_NORMAL – powyzej normalnego
THREAD_PRIORITY_NORMAL – normalny
THREAD_PRIORITY_BELOW_NORMAL – poniżej normalnego
THREAD_PRIORITY_LOWEST – najgorszy
THREAD_PRIORITY_IDLE – niski