Partager via


Partage d’objets nommés

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

Objets nommés dans les applications empaquetées

Les objets nommés permettent aux 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 pour ouvrir un handle à l’objet. Les objets nommés sont couramment utilisés pour de synchronisation de threads et communication interprocesseur.

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 pour l'ACL d'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 LPSECURITY_ATTRIBUTES dans les appels Create avec les règles EXPLICIT_ACCESS pour les applications empaquetées, vous pouvez accorder l’accès à ces applications pour leur permettre d’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 quand les ouvrir. Ils n’ont pas besoin qu'on leur accorde 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, 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 <PATH> par 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, mais l'accès doit toujours être accordé lorsque ces objets sont créés.

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 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.