Noms d’objets
Les objets nommés offrent un moyen simple pour les processus de partager des handles d’objets. Une fois qu’un processus a créé un objet 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 sur l’objet. La comparaison de noms respecte la casse.
Les noms d’événement, de sémaphore, de mutex, de minuteur d’attente, de mappage de fichiers et d’objets 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 à vérifier les 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 de même type, la fonction réussit, retourne un handle à l’objet existant et GetLastError retourne ERROR_ALREADY_EXISTS. Par exemple, si le nom spécifié dans un appel au CreateMutex fonction 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. L’utilisation de plusieurs processus CreateMutex pour le même mutex équivaut donc à avoir un processus qui appelle CreateMutex tandis que les autres processus appellent OpenMutex, sauf qu’il élimine la nécessité de s’assurer que le processus de création est démarré en premier. Toutefois, lorsque vous utilisez cette technique pour les objets mutex, aucun des processus appelants ne doit demander la propriété immédiate du mutex. Si plusieurs processus demandent une 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 pouvant être attendus, les objets de mappage de fichiers et les objets de travail. En outre, chaque session cliente Terminal Services a son propre espace de noms distinct pour ces objets. Les processus clients de 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 noyau. Le basculement rapide d’utilisateur est implémenté à l’aide de sessions Terminal Services (chaque utilisateur se connecte à une autre session). Les noms d’objets noyau doivent suivre les instructions décrites pour les services 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.
Rubriques connexes