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 fournissent un moyen simple pour les processus de partager des descripteurs 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 afin d’ouvrir un handle à l’objet . Les objets nommés sont couramment utilisés pour la synchronisation de threads et la communication interprocessus.

Par défaut, les applications empaquetées peuvent accéder uniquement 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 lors de l’ouverture des objets.

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 pouvant 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 lors de la création des objets nommés.

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

Notes

Le nom de la famille de packages est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le 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 pour ACL 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 paramètre dans Create les LPSECURITY_ATTRIBUTES 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é.

Notes

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. Il n’est pas nécessaire de leur accorder l’accès.

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, également 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 pour une application empaquetée en passant son nom de famille de packages à DeriveAppContainerSidFromAppContainerName.

Notes

Le nom de la famille de packages est disponible via l’éditeur de manifeste de package dans Visual Studio pendant le 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 de création.
  • Remplacez par <NAME> le nom de l’objet.

Notes

Le préfixe des noms d’objets avec <PATH> n’est requis que 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, mais l’accès doit toujours être accordé lors de la création des objets.

Remarques

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 strictes et nécessite 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.