Spazi dei nomi degli oggetti kernel

Un server Servizi Desktop remoto dispone di più spazi dei nomi per gli oggetti kernel denominati seguenti: eventi, semafori, mutex, timer waitable, oggetti di mapping di file e oggetti processo. Esiste uno spazio dei nomi globale usato principalmente dai servizi nelle applicazioni client/server. Inoltre, ogni sessione client ha uno spazio dei nomi separato per questi oggetti, ad esempio in Windows Vista.

Gli spazi dei nomi della sessione client 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 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:

Nota

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

 

CreateEvent( NULL, FALSE, FALSE, "Global\\CSAPP" );

Per impostazione predefinita, le applicazioni di servizio in un ambiente Servizi Desktop remoto usano lo spazio dei nomi globale.

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

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 può 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 dell'esecuzione dell'applicazione una sola 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 degli utenti viene implementato tramite sessioni di Servizi Desktop remoto. Il primo utente a eseguire l'accesso usa la sessione 1, l'utente successivo a cui accedere usa la sessione 2 e così via. I nomi degli oggetti 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 nello spazio dei nomi globale, usando CreateFileMapping, da una sessione diversa da zero sessione è un'operazione con privilegi. Per questo motivo, un'applicazione in esecuzione in una sessione del server Host sessione Desktop remoto (Host sessione Desktop remoto) deve avere SeCreateGlobalPrivilege abilitato per creare correttamente un oggetto di mapping di file nello spazio dei nomi globale. Il controllo dei privilegi è limitato alla creazione di oggetti di mapping dei file e non si applica all'apertura di quelli esistenti. Ad esempio, se un servizio o il sistema crea un oggetto di mapping di file, qualsiasi processo in esecuzione in qualsiasi sessione può accedere a tale oggetto di mapping di file a condizione che l'utente disponga dell'accesso necessario.