Newsgroup: it.comp.programmare.win32
Titolo: HANDLE HELP

>>>>>>>>>>>>

e quasiasi cosa li riguardi...
immagino ti interessi in relazione all'ambiente win16/32:
un handle non e' altro che un valore numerico (normalmente unsigned 16
/ 32 bit) utilizzato come una sorta di alias per referenziare in modo
opaco un oggetto (nell'accezzione piu' lata di
risorsa,struttura,blocco di mem,etc..).
Gli aspetti fondamentali degli handle sono:
l'opacita' /astrattezza: un handle non e' un puntatore (o almeno non
dichiaratamente) : quindi non e' possibile deferenziarlo e manipolare
direttamente l'oggetto a cui si riferisce se non attraverso un'API a
cui va passato come argomento per identificare l'oggetto stesso..
questo si traduce in una astrazione che permette ad exp di utilizzare
gli handle con API che implentano semantiche diverse (per oggetti
diversi) in modo trasparente (f.e. syncronization objects, file
objects, etc..)
univocita' / scope: 
qui c'e' da fare delle distizioni: la maggior parte degli handle
nell'implementazione di win32 non e' globale : l'handle e' cioe'
locale (essendo in genere un indice nella sua handle table) al
processo che l'ha "aperto", all'interno del quale ne e' pero'
garantita l'univocita'.. inoltre per alcuni "oggetti" particolari
(process, thread) le API non restituisco un handle ma un c.d.
pseudo-handle.. questo non e' presente nella handle table ma ha un
valore predeterminato (tienilo presente x le operazioni sugli handle).
Importante eccezzione a questa regola sono gli handle x objs (windows
handles, etc..) componenti x il windowing e la grafica (USERxx e
GDIxx) i quali sono globali all'interno del subsys win32.
ereditabilita' / duplicabilita' : x ovviare alla non globalita' e'
stata implementata la possibilita' di ereditare gli handles dal
processo parent all'atto della creazione (f.e. CreateProcess +
bInheritHandles) un nuovo processo (e la possibilita' di duplicare
(entrambe le operzioni comportano una copia tra le handle tables) fra
due processi un handle (DuplicateHandle)
 
sicurezza: semplificando la sicurezza (i.e. SeAccessCheck) in win32
questa e' imperniata sulla verifica dei rights all'atto di una
operazione che coinvolge un handle (creazione, apertura, etc.)
usage tracking/accounting : win32 tiene traccia dell'utilizzo delle
risorse attraverso i reference e gli handle counters ovvero contatori
associati proprio all'utilizzo (f.e. apertura, chiusura da parte di un
processo) di un handle.. ad exp win32 libera una obj/risorsa solo
quando il suo reference count e' pari a zero.. molti leaks (almeno x
win9x) nonche' GPF ;) si verificano proprio x errori relativi agli ref
cpunts degli handles. Questo meccanismo inoltre entra anche in gioco
nell'accounting delle risorse ad un processo / job , etc.. 
[ piccola nota personale: purtroppo l'implementazioni di win32 non
sempre e' completa sotto l'aspetto astrazione / consistenza : mi
riferisco al fatto che benche' molte API accettino handles di "tipo"
diverso spesso si notano inconsistenze che costringono ad dovere
gestire operazioni sugli object/handles concettualmente appartenenti
alle stesse "famiglie" funzionali con un moltitudine di API diverse..
qualcuno dira' che si tratta di specializzazione ma io la giudico
inconsistenza ]
Spero di averti schiarito un po' le idee.. cmq l'argomento handles e'
vasto ed articolato x cui in effetti, per cui o lo sperimenti nei
singoli casi o davvero non sarebbe male che ti prendessi un libro
sulla programmazione in generale under win32 (Ritcher, Petzold,
etc..).
Saluti,
 Walker Boh