Systémové programovanie Windows Procesy Andrea Číková Martin Osovský O čom to dnes bude? • Procesy vo Windows - vstupný bod procesu - spôsoby ukončenia procesu - API pre prácu s procesmi - vytvorenie procesu Čo je to proces? • Reprezentuje inštanciu bežiaceho programu: - vytvoríte proces, aby ste spustili program - spustenie aplikácie vytvorí proces • Proces je definovaný: - adresovým priestorom - zdrojmi (otvára handly) - bezpečnostným profilom • Každý proces začína s jedným vláknom: - prvé vlákno vykoná funkciu main - môže vytvoriť iné vlákna v tom istom procese - môže vytvoriť ďalší proces Procesy a vlákna - vnútorná dátová štruktúra Každý proces má vlastný... • virtuálny adresový priestor (obsahujúci kód programu, globálne úložište, haldu, zásobníky vlákien) - procesy si navzájom nemôžu narušiť adresové priestory • working set – fyzická pamäť „vlastnená“ procesom • access token – obsahuje bezpečnostné identifikátory • tabuľku deskriptorov (handle table) pre objekty jadra • enviroment strings • príkazový riadok • Tieto sú spoločné pre všetky vlákna v procese, ale rozdielne a chránené medzi procesmi. Vstupný bod procesu • Existujú 4 rôzne vstupné body procesu: - WinMain - wWinMain - main - wmain • Predpona w- určuje použitie Unicode, inak ANSI znaky • Predpona Win- označuje aplikáciu s GUI, inak sa jedná o konzolovú aplikáciu Ukončenie procesu • Aplikácia skončí prirodzene (ExitProcess): - užívateľ sa rozhodne aplikáciu ukončiť - primárne vlákno procesu sa skončí (funkcia main sa vráti) • Aplikácii je „nariadené“ skončiť (ExitProcess): - napr. „End Task“ v Task Manageri - Task Manager pošle WM_CLOSE správu aplikácii - tá by mala zareagovať volaním ExitProcess... • Aplikácia je „donútená“ skončiť (TerminateProcess): - ak aplikácia nereaguje do 5 sekúnd od „End Task“, Task Manager zobraží dialógové okno „End Program“, ktorý volá funkciu TerminateProcess - obdobne „End Process“ v Task Manageri • Neošetrená výnimka API pre prácu s procesmi • CreateProcess • OpenProcess • GetCurrentProcessId – vráti globálne ID • GetCurrentProcess – vráti handle • ExitProcess • TerminateProcess • Get/SetProcessShutdownParameters • GetExitCodeProcess • GetProcessTimes • GetStartupInfo Vytvorenie procesu • Vo Win32 neexistuje vzťah parent/child • Funkcia CreateProcess – nový proces s primárnym vláknom BOOL CreateProcess( LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); Parametre funkcie CreateProcess • dwCreationFlags: - CREATE_SUSPENDED, DETACHED_PROCESS, CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP • lpProcessInformation - ukazateľ na handle a ID nového procesu/vlákna Ďakujeme za pozornosť