28.01.2013 Views

1. Procese Windows; comunicaţii prin pipe şi IPC 2

1. Procese Windows; comunicaţii prin pipe şi IPC 2

1. Procese Windows; comunicaţii prin pipe şi IPC 2

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 8 -<br />

lpsaProcess <strong>şi</strong> lpsaThread identifică atributele de securitate care trebuie date noului<br />

proces <strong>şi</strong> threadului său primar. Dacă valorile lor sunt NULL, sistemul va furniza valori<br />

implicite pentru aceşti parametri.<br />

fInheritHandles - specifică modul în care se moştenesc referinţele la obiecte de către<br />

procesul fiu. In mod normal, în <strong>Windows</strong> acestea nu sunt acelea<strong>şi</strong> pentru fiecare proces.<br />

Chiar dacă este vorba de acela<strong>şi</strong> obiect sistem, procese diferite pot lucra cu valori diferite.<br />

Dacă dorim ca aceste valori să fie identice în procesul tată <strong>şi</strong> procesul fiu, atunci putem<br />

specifica valoarea TRUE acestui parametru.<br />

fdwCreate - conţine comutatorii (flags) ce afectează modul în care este creat noul proces.<br />

Se pot specifica mai mulţi comutatori combinându-i <strong>prin</strong> operatorul “|”.<br />

lpvEnvironment - referă un bloc de memorie în care sunt memorate <strong>şi</strong>rurile, care descriu<br />

variabilele de mediu ce trebuiesc utilizate de noul proces. De obicei, valoarea acestui<br />

parametru trebuie să fie NULL, caz în care procesul fiu primeşte acelea<strong>şi</strong> variabile de mediu<br />

ca <strong>şi</strong> părintele.<br />

lpszCurDir - parametrul permite specificarea unui nou disc <strong>şi</strong> a unui nou director curent<br />

pentru procesul nou creat. Dacă valoarea transmisă pentru acest parametru este NULL,<br />

directorul <strong>şi</strong> discul de lucru ale noului proces sunt acelea<strong>şi</strong> ca <strong>şi</strong> cele ale procesului părinte.<br />

lpsiStartInfo – punctează către o structură STARTUPINFO. Aceste informaţii sunt<br />

necesare pentru subsistemul Win32 la crearea unui nou proces. Această structură este prea<br />

complexă pentru a o descrie aici. Să reţinem doar că în ea se pot specifica caracteristicile unei<br />

ferestre consolă: culoare, număr de linii, coloane, poziţie pe ecran, titlu, etc.; informaţii<br />

despre modul în care va fi afişată fereastra aplicaţiei: maximizată, icon, etc.; informaţii despre<br />

comportarea sistemului în timpul încărcării aplicaţiei: forma cursorului, etc.<br />

lppiProcInfo - conţine adresa unei structuri care va fi completată cu informaţii de către<br />

funcţia CreateProces înainte ca aceasta să-<strong>şi</strong> termine execuţia. Această structură va conţine<br />

referinţele pentru noul proces, pentru threadul său primar, precum <strong>şi</strong> identificatorii acestora.<br />

Structura este declarată astfel:<br />

typedef struct _PROCESS_INFORMATION {<br />

HANDLE hProcess;<br />

HANDLE hThread;<br />

DWORD dwProcessId;<br />

DWORD dwThreadId;<br />

} PROCESS_INFORMATION;<br />

<strong>1.</strong>3.2. Terminarea unui proces <strong>Windows</strong><br />

Un proces poate fi terminat pe două căi: apelând din interior funcţia ExitProcess sau<br />

apelând din exterior funcţia TerminateProcess. Este preferabilă prima cale, cea de-a doua<br />

trebuie folosită doar pentru situaţii extreme.<br />

Prototipul funcţiei ExitProcess este:<br />

VOID ExitProcess (UINT fuExitCode);<br />

Funcţia termină procesul care a apelat-o <strong>şi</strong> setează codul de retur pe valoarea fuExitCode.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!