31.05.2013 Views

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

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.

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 <

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

Saved successfully!

Ooh no, something went wrong!