Share via


Spazi dei nomi degli oggetti kernel

Windows include più spazi dei nomi per gli oggetti kernel denominati seguenti: eventi, semafori, mutex, timer waitable, oggetti di mapping di file, oggetti processo e oggetti collegamento simbolico. Esiste uno spazio dei nomi globale usato principalmente dai servizi nelle applicazioni client/server. Inoltre, ogni sessione ha uno spazio dei nomi separato per questi oggetti.

Gli spazi dei nomi di sessione separati consentono a più client di eseguire le stesse applicazioni senza interferire tra loro. Per i processi avviati in una sessione client, il sistema usa lo spazio dei nomi della sessione client per impostazione predefinita. Tuttavia, questi processi possono usare lo spazio dei nomi globale anteponendo il prefisso "Global\" al nome dell'oggetto. Ad esempio, il codice seguente chiama CreateEvent e crea un oggetto evento denominato CSAPP nello spazio dei nomi globale:

CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );

Per impostazione predefinita, le applicazioni di servizio usano lo spazio dei nomi globale.

Nota

Lo spazio dei nomi globale non è disponibile per le app di Windows Store.

La sessione zero viene usata solo per i servizi di hosting e non esiste alcuna sessione della console, a differenza delle versioni di Windows precedenti a Windows Vista.

Lo spazio dei nomi globale consente ai processi in più sessioni client di comunicare con un'applicazione di servizio. Ad esempio, un'applicazione client/server potrebbe usare un oggetto mutex per la sincronizzazione. Il modulo server può creare l'oggetto mutex nello spazio dei nomi globale. Una sessione client può quindi usare il prefisso "Global\" per aprire l'oggetto mutex.

Un altro uso dello spazio dei nomi globale è destinato alle applicazioni che usano oggetti denominati per rilevare che esiste già un'istanza dell'applicazione in esecuzione nel sistema in tutte le sessioni. Questo oggetto denominato deve essere creato o aperto nello spazio dei nomi globale anziché nello spazio dei nomi per sessione. Il caso più comune di esecuzione dell'applicazione una volta per sessione è supportato per impostazione predefinita perché l'oggetto denominato viene creato in uno spazio dei nomi per sessione.

Oltre al prefisso "Global\", i processi client possono usare il prefisso "Local\" per creare in modo esplicito un oggetto nello spazio dei nomi della sessione. Queste parole chiave fanno distinzione tra maiuscole e minuscole.

Il prefisso "Session\" è riservato per l'uso del sistema e non è consigliabile usarlo nei nomi degli oggetti kernel.

Il passaggio rapido dell'utente viene implementato tramite sessioni. Il primo utente a eseguire l'accesso usa la sessione 1, l'utente successivo per accedere usa la sessione 2 e così via. I nomi degli oggetti del kernel devono seguire le linee guida descritte per Servizi Desktop remoto in modo che le applicazioni possano supportare più utenti.

La creazione di un oggetto di mapping di file o di un oggetto collegamento simbolico nello spazio dei nomi globale, ad esempio tramite CreateFileMapping, da una sessione diversa da session zero è un'operazione con privilegi. Per questo motivo, un'applicazione deve avere SeCreateGlobalPrivilege abilitato per creare un oggetto di mapping di file o un oggetto collegamento simbolico nello spazio dei nomi globale. Il controllo dei privilegi è limitato alla creazione di questi oggetti e non si applica all'apertura di quelli esistenti. Ad esempio, se un servizio o il sistema crea un oggetto di mapping di file nello spazio dei nomi globale, qualsiasi processo in esecuzione in qualsiasi sessione può accedere a tale oggetto di mapping di file purché il processo abbia l'accesso necessario.