Oggetti kernel
Gli handle di oggetti kernel sono specifici del processo. Ovvero, un processo deve creare l'oggetto o aprire un oggetto esistente per ottenere un handle di oggetto kernel. Il limite per processo per handle del kernel è 2^24. Tuttavia, gli handle vengono archiviati nel pool di paging, quindi il numero effettivo di handle che è possibile creare è basato sulla memoria disponibile. Il numero di handle che è possibile creare in Windows a 32 bit è notevolmente inferiore a 2^24.
Qualsiasi processo può creare un nuovo handle per un oggetto kernel esistente (anche uno creato da un altro processo), a condizione che il processo conosca il nome dell'oggetto e abbia accesso di sicurezza all'oggetto. Gli handle di oggetti kernel includono diritti di accesso che indicano le azioni che possono essere concesse o negate a un processo. Un'applicazione specifica i diritti di accesso quando crea un oggetto o ottiene un handle di oggetto esistente. Ogni tipo di oggetto kernel supporta il proprio set di diritti di accesso. Ad esempio, gli handle di eventi possono avere accesso impostato o in attesa (o entrambi), gli handle di file possono avere accesso in lettura o scrittura (o entrambi) e così via. Per altre informazioni, vedere Oggetti a protezione diretta.
Nella figura seguente un'applicazione crea un oggetto evento. La funzione CreateEvent crea l'oggetto evento e restituisce un handle di oggetto.
Dopo aver creato l'oggetto evento, l'applicazione può usare l'handle eventi per impostare o attendere l'evento. L'handle rimane valido fino a quando l'applicazione chiude o termina l'handle.
La maggior parte degli oggetti kernel supporta più handle per un singolo oggetto. Ad esempio, l'applicazione nella figura precedente potrebbe ottenere handle di oggetti evento aggiuntivi usando la funzione OpenEvent , come illustrato nella figura seguente.
Questo metodo consente a un'applicazione di avere handle con diritti di accesso diversi. Ad esempio, Handle 1 potrebbe avere impostato e attendere l'accesso all'evento e Handle 2 potrebbe avere solo l'accesso in attesa.
Se un altro processo conosce il nome dell'evento e ha accesso alla sicurezza all'oggetto, può creare un proprio handle di oggetto evento usando OpenEvent. L'applicazione di creazione può anche duplicare uno dei relativi handle nello stesso processo o in un altro processo usando la funzione DuplicateHandle .
Un oggetto rimane in memoria finché esiste almeno un handle di oggetto. Nella figura seguente le applicazioni usano la funzione CloseHandle per chiudere gli handle dell'oggetto evento. Quando non sono presenti handle di evento, il sistema rimuove l'oggetto dalla memoria, come illustrato nella figura seguente.
Il sistema gestisce gli oggetti file in modo leggermente diverso da altri oggetti kernel. Gli oggetti file contengono il puntatore al file, ovvero il puntatore al byte successivo da leggere o scrivere in un file. Ogni volta che un'applicazione crea un nuovo handle di file, il sistema crea un nuovo oggetto file. Pertanto, più oggetti file possono fare riferimento a un singolo file su disco, come illustrato nella figura successiva.
Solo tramite duplicazione o ereditarietà è possibile fare riferimento allo stesso oggetto file, come illustrato nella figura seguente.
Nella tabella seguente sono elencati ognuno degli oggetti kernel, insieme alle funzioni creator e destroyer di ogni oggetto. Le funzioni creator creano l'oggetto e un handle di oggetto o creano un nuovo handle di oggetto esistente. Le funzioni destroyer chiudono l'handle dell'oggetto. Quando un'applicazione chiude l'ultimo handle a un oggetto kernel, il sistema rimuove l'oggetto dalla memoria.
Argomenti correlati