Noms d'objets

Les objets nommés fournissent un moyen simple pour les processus de partager des descripteurs d’objets. Une fois qu’un processus a créé un objet d’événement nommé, mutex, sémaphore ou minuteur, d’autres processus peuvent utiliser le nom pour appeler la fonction appropriée ( OpenEvent, OpenMutex, OpenSemaphore ou OpenWaitableTimer) pour ouvrir un handle à l’objet. La comparaison de noms respecte la casse.

Les noms des objets d’événement, de sémaphore, de mutex, de minuteur d’attente, de mappage de fichiers et de travail partagent le même espace de noms. Si vous essayez de créer un objet à l’aide d’un nom utilisé par un objet d’un autre type, la fonction échoue et GetLastError retourne ERROR_INVALID_HANDLE. Par conséquent, lors de la création d’objets nommés, utilisez des noms uniques et veillez à case activée des valeurs de retour de fonction pour les erreurs de nom en double.

Si vous essayez de créer un objet à l’aide d’un nom utilisé par un objet du même type, la fonction réussit, en retournant un handle à l’objet existant, et GetLastError retourne ERROR_ALREADY_EXISTS. Par exemple, si le nom spécifié dans un appel à la fonction CreateMutex correspond au nom d’un objet mutex existant, la fonction retourne un handle à l’objet existant. Dans ce cas, l’appel à CreateMutex équivaut à un appel à la fonction OpenMutex . Le fait que plusieurs processus utilisent CreateMutex pour le même mutex équivaut donc à avoir un processus qui appelle CreateMutex tandis que les autres processus appellent OpenMutex, sauf qu’il n’est pas nécessaire de s’assurer que le processus de création est démarré en premier. Toutefois, lors de l’utilisation de cette technique pour les objets mutex, aucun des processus appelants ne doit demander la propriété immédiate du mutex. Si plusieurs processus demandent la propriété immédiate, il peut être difficile de prédire quel processus obtient réellement la propriété initiale.

Un environnement Terminal Services dispose d’un espace de noms global pour les événements, les sémaphores, les mutex, les minuteurs d’attente, les objets de mappage de fichiers et les objets de travail. En outre, chaque session cliente des services Terminal a son propre espace de noms distinct pour ces objets. Les processus clients Terminal Services peuvent utiliser des noms d’objets avec un préfixe « Global\ » ou « Local\ » pour créer explicitement un objet dans l’espace de noms global ou de session. Pour plus d’informations, consultez Espaces de noms d’objets du noyau. La commutation rapide des utilisateurs est implémentée à l’aide de sessions Terminal Services (chaque utilisateur se connecte à une session différente). Les noms d’objets de noyau doivent suivre les instructions décrites pour Terminal Services afin que les applications puissent prendre en charge plusieurs utilisateurs.

Les objets de synchronisation peuvent être créés dans un espace de noms privé. Pour plus d’informations, consultez Espaces de noms d’objets.

Utilisation d’objets nommés