Il sistema operativo Windows XP - Apogeo
Il sistema operativo Windows XP - Apogeo
Il sistema operativo Windows XP - Apogeo
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
7 Interfaccia del programmatore<br />
Win32 API è l'interfaccia fondamentale rivolta alle capacità di <strong>Windows</strong> <strong>XP</strong>. Questo paragrafo<br />
descrive cinque aspetti principali di Win32 API: accesso agli oggetti del kernel, condivisione degli<br />
oggetti fra processi, gestione del processo, comunicazione tra processi e gestione della memoria.<br />
7.1 Accesso agli oggetti del kernel<br />
<strong>Il</strong> kernel di <strong>Windows</strong> <strong>XP</strong> fornisce molti servizi che possono essere usati dai programmi<br />
applicativi; i programmi applicativi ottengono questi servizi manipolando gli oggetti del kernel.<br />
Un processo può accedere ad un oggetto del kernel, detto XXX, chiamando la funzione<br />
CreateXXX per aprire un handle in XXX.. Questo handle, nell’ambito del processo, è unico. In<br />
base all’oggetto che si apre, se la funzione create non va a buon fine, può restituire 0, o può<br />
restituire un costante speciale chiamata INVALID_HANDLE_VALUE. Un processo può chiudere<br />
qualsiasi handle mediante la chiamata della funzione Close_Handle, in tal modo il <strong>sistema</strong><br />
può cancellare l'oggetto se il numero di processi che usano l'oggetto cala a 0.<br />
7.2 Condivisione degli oggetti fra i processi<br />
<strong>Windows</strong> <strong>XP</strong> fornisce tre modi per condividere gli oggetti fra i processi: nel primo modo il<br />
processo figlio eredita un handle dell'oggetto, il processo padre chiama la funzione CreateXXX,<br />
il padre fornisce una struttura SECURITIES_ATTRIBUTES con il campo bInheritHandle<br />
posto su TRUE. Questo campo crea un handle ereditabile. Dopo che si crea il processo figlio, si<br />
passa un valore TRUE a CreateProcess (argomento della funzione bInheritHandle). La<br />
Figura 11 mostra un campione del codice che genera un handle del semaforo ereditato da un<br />
processo figlio.<br />
…<br />
SECURITY_ATTRIBUTES sa;<br />
sa.nlength = sizeof(sa);<br />
sa.lpSecurityDescriptor = NULL;<br />
sa.bInheritHandle = TRUE;<br />
Handl_a_semaphore = CreateSemaphore (&sa,1,1,<br />
NULL); char command_line[132 ] ;<br />
ostrstream ostring (command_line,<br />
sizeof(command_line));<br />
ostring < < a_semaphore <