Partager via


Partage d’objets nommés

Cette rubrique explique comment partager des objets nommés entre des applications plateforme Windows universelle (UWP) et des applications Win32.

Objets nommés dans les applications empaquetées

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é, d’autres processus peuvent utiliser le nom pour appeler la fonction appropriée pour ouvrir un handle à l’objet. Les objets nommés sont couramment utilisés pour la synchronisation de threads et la communication entre processus.

Par défaut, les applications empaquetées peuvent uniquement accéder aux objets nommés qu’elles ont créés. Pour partager des objets nommés avec des applications empaquetées, les autorisations doivent être définies lors de la création d’objets, et les noms doivent être qualifiés lorsque des objets sont ouverts.

Création d’objets nommés

Les objets nommés sont créés avec une API correspondante Create :

Toutes ces API partagent un LPSECURITY_ATTRIBUTES paramètre qui permet à l’appelant de spécifier des listes de contrôle d’accès (ACL) pour contrôler les processus qui peuvent accéder à l’objet. Pour partager des objets nommés avec des applications empaquetées, l’autorisation doit être accordée dans les listes de contrôle d’accès lorsque les objets nommés sont créés.

Les identificateurs de sécurité (SID) représentent des identités au sein des listes de contrôle d’accès. Chaque application empaquetée a son propre SID en fonction de son nom de famille de packages. Vous pouvez générer le SID d’une application empaquetée en passant son nom de famille de packages à DeriveAppContainerSidFromAppContainerName.

Remarque

Le nom de la famille de packages est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le temps de développement, via l’Espace partenaires pour les applications publiées via le Microsoft Store ou via la commande PowerShell Get-AppxPackage pour les applications déjà installées.

Cet exemple illustre le modèle de base nécessaire à la liste de contrôle d’accès à un objet nommé. Pour partager des objets nommés avec des applications empaquetées, créez une structure EXPLICIT_ACCESS pour chaque application :

En remplissant le LPSECURITY_ATTRIBUTES paramètre dans Create les appels avec EXPLICIT_ACCESS des règles pour les applications empaquetées, vous pouvez accorder l’accès à ces applications pour ouvrir l’objet nommé.

Remarque

Les applications Win32 peuvent accéder à tous les objets nommés créés par des applications empaquetées tant qu’elles qualifient les noms d’objets lors de leur ouverture. Ils n’ont pas besoin d’accéder.

Ouverture d’objets nommés

Les objets nommés sont ouverts en passant un nom à une API correspondante Open :

Les objets nommés créés par une application empaquetée sont créés dans l’espace de noms de l’application, sinon appelé chemin d’accès de l’objet nommé. Lors de l’ouverture d’objets nommés créés par une application empaquetée, les noms d’objets doivent être précédés du chemin d’accès de l’objet nommé de l’application de création.

GetAppContainerNamedObjectPath retourne le chemin d’accès de l’objet nommé pour une application empaquetée en fonction de son SID. Vous pouvez générer le SID d’une application empaquetée en passant son nom de famille de packages à DeriveAppContainerSidFromAppContainerName.

Remarque

Le nom de la famille de packages est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le temps de développement, via l’Espace partenaires pour les applications publiées via le Microsoft Store ou via la commande PowerShell Get-AppxPackage pour les applications déjà installées.

Lors de l’ouverture d’objets nommés créés par une application empaquetée, utilisez le format <PATH>\<NAME>:

  • Remplacez par <PATH> le chemin d’accès de l’objet nommé de l’application.
  • Remplacez par <NAME> le nom de l’objet.

Remarque

Le préfixe des noms d’objets avec <PATH> est obligatoire uniquement si une application empaquetée a créé l’objet. Les objets nommés créés par les applications Win32 n’ont pas besoin d’être qualifiés, même si l’accès doit toujours être accordé lors de la création des objets.

Notes

Les objets nommés dans les applications empaquetées sont isolés par défaut pour préserver la sécurité et garantir la prise en charge des événements de cycle de vie des applications, tels que la suspension et l’arrêt. Le partage d’objets nommés entre les applications introduit des contraintes de liaison et de contrôle de version serrées et exige que chaque application soit résiliente au cycle de vie des autres. Pour ces raisons, il est recommandé de partager uniquement des objets nommés entre des applications du même éditeur.