Espaces de noms d’objets noyau

Windows dispose de plusieurs espaces de noms pour les objets de noyau nommés suivants : événements, sémaphores, mutex, minuteurs d’attente, objets de mappage de fichiers, objets de travail et objets de lien symbolique. Il existe un espace de noms global utilisé principalement par les services dans les applications client/serveur. En outre, chaque session a un espace de noms distinct pour ces objets.

Les espaces de noms de session distincts permettent à plusieurs clients d’exécuter les mêmes applications sans interférer entre elles. Pour les processus démarrés sous une session cliente, le système utilise l’espace de noms de session client par défaut. Toutefois, ces processus peuvent utiliser l’espace de noms global en ajoutant le préfixe « Global\ » au nom de l’objet. Par exemple, le code suivant appelle CreateEvent et crée un objet d’événement nommé CSAPP dans l’espace de noms global :

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

Les applications de service utilisent l’espace de noms global par défaut.

Remarque

L’espace de noms global n’est pas disponible pour les applications du Windows Store.

La session zéro est utilisée uniquement pour l’hébergement de services, et il n’existe aucune session de console, contrairement aux versions de Windows antérieures à Windows Vista.

L’espace de noms global permet aux processus sur plusieurs sessions clientes de communiquer avec une application de service. Par exemple, une application client/serveur peut utiliser un objet mutex pour la synchronisation. Le module serveur peut créer l’objet mutex dans l’espace de noms global. Ensuite, une session cliente peut utiliser le préfixe « Global\ » pour ouvrir l’objet mutex.

Une autre utilisation de l’espace de noms global est destinée aux applications qui utilisent des objets nommés pour détecter qu’il existe déjà une instance de l’application s’exécutant dans le système sur toutes les sessions. Cet objet nommé doit être créé ou ouvert dans l’espace de noms global au lieu de l’espace de noms par session. Le cas plus courant d’exécution de l’application une fois par session est pris en charge par défaut, car l’objet nommé est créé dans un espace de noms par session.

En plus du préfixe « Global\ », les processus clients peuvent utiliser le préfixe « Local\ » pour créer explicitement un objet dans leur espace de noms de session. Ces mots clés sont sensibles à la casse.

Le préfixe « Session\ » est réservé à l’utilisation du système et vous ne devez pas l’utiliser dans les noms d’objets noyau.

Le basculement rapide d’utilisateur est implémenté à l’aide de sessions. Le premier utilisateur à se connecter utilise la session 1, l’utilisateur suivant pour se connecter utilise la session 2, et ainsi de suite. Les noms d’objets noyau doivent suivre les instructions décrites pour les services de bureau à distance afin que les applications puissent prendre en charge plusieurs utilisateurs.

La création d’un objet de mappage de fichiers ou d’un objet de lien symbolique dans l’espace de noms global, par exemple à l’aide de CreateFileMapping, à partir d’une session autre que la session zéro est une opération privilégiée. En raison de cela, SeCreateGlobalPrivilege doit être activée pour qu’une application puisse créer un objet de mappage de fichiers ou un objet de lien symbolique dans l’espace de noms global. Le contrôle de privilège est limité à la création de ces objets et ne s’applique pas à l’ouverture de ces objets. Par exemple, si un service ou le système crée un objet de mappage de fichiers dans l’espace de noms global, tout processus exécuté dans n’importe quelle session peut accéder à cet objet de mappage de fichiers, à condition que le processus ait l’accès nécessaire.