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
- TAGS
- procese
- pipe
- www.cs.ubbcluj.ro
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.