Compartición de objetos con nombre

En este tema se explica cómo compartir objetos con nombre entre aplicaciones de Plataforma universal de Windows (UWP) y aplicaciones Win32.

Objetos con nombre en aplicaciones empaquetadas

Los objetos con nombre proporcionan una manera sencilla para que los procesos compartan identificadores de objeto. Una vez que un proceso ha creado un objeto con nombre, otros procesos pueden usar el nombre para llamar a la función adecuada para abrir un identificador para el objeto. Los objetos con nombre se usan normalmente para la sincronización de subprocesos y la comunicación entre procesos.

De forma predeterminada, las aplicaciones empaquetadas solo pueden acceder a los objetos con nombre que han creado. Para compartir objetos con nombre con aplicaciones empaquetadas, los permisos deben establecerse cuando se crean objetos y los nombres deben calificarse cuando se abren los objetos.

Creación de objetos con nombre

Los objetos con nombre se crean con una API correspondiente Create :

Todas estas API comparten un LPSECURITY_ATTRIBUTES parámetro que permite al autor de la llamada especificar listas de control de acceso (ACL) para controlar qué procesos pueden acceder al objeto. Para compartir objetos con nombre con aplicaciones empaquetadas, se debe conceder permiso dentro de las ACL cuando se crean los objetos con nombre.

Los identificadores de seguridad (SID) representan identidades dentro de las ACL. Cada aplicación empaquetada tiene su propio SID en función de su nombre de familia de paquete. Puede generar el SID para una aplicación empaquetada pasando su nombre de familia de paquete a DeriveAppContainerSidFromAppContainerName.

Nota:

El nombre de familia del paquete se puede encontrar a través del editor de manifiestos del paquete en Visual Studio durante el tiempo de desarrollo, a través del Centro de partners para las aplicaciones publicadas a través de Microsoft Store o mediante el comando Get-AppxPackage de PowerShell para las aplicaciones que ya están instaladas.

En este ejemplo se muestra el patrón básico necesario para la ACL de un objeto con nombre. Para compartir objetos con nombre con aplicaciones empaquetadas, cree una estructura de EXPLICIT_ACCESS para cada aplicación:

Al rellenar el LPSECURITY_ATTRIBUTES parámetro en Create llamadas con EXPLICIT_ACCESS reglas para aplicaciones empaquetadas, puede conceder acceso a esas aplicaciones para abrir el objeto con nombre.

Nota

Las aplicaciones Win32 pueden tener acceso a todos los objetos con nombre creados por las aplicaciones empaquetadas siempre que califiquen los nombres de objeto al abrirlos. No es necesario conceder acceso.

Apertura de objetos con nombre

Los objetos con nombre se abren pasando un nombre a una API correspondiente Open :

Los objetos con nombre creados por una aplicación empaquetada se crean dentro del espacio de nombres de la aplicación; de lo contrario, se conoce como ruta de acceso al objeto con nombre. Al abrir objetos con nombre creados por una aplicación empaquetada, los nombres de objeto deben tener como prefijo la ruta de acceso de objeto con nombre de la aplicación de creación.

GetAppContainerNamedObjectPath devolverá la ruta de acceso del objeto con nombre para una aplicación empaquetada en función de su SID. Puede generar el SID para una aplicación empaquetada pasando su nombre de familia de paquete a DeriveAppContainerSidFromAppContainerName.

Nota

El nombre de familia del paquete se puede encontrar a través del editor de manifiestos del paquete en Visual Studio durante el tiempo de desarrollo, a través del Centro de partners para las aplicaciones publicadas a través de Microsoft Store o mediante el comando Get-AppxPackage de PowerShell para las aplicaciones que ya están instaladas.

Al abrir objetos con nombre creados por una aplicación empaquetada, use el formato <PATH>\<NAME>:

  • Reemplace por <PATH> la ruta de acceso de objeto con nombre de la aplicación de creación.
  • Reemplace por <NAME> el nombre del objeto.

Nota:

El prefijo de nombres de objeto con <PATH> solo es necesario si una aplicación empaquetada creó el objeto . No es necesario calificar los objetos con nombre creados por las aplicaciones Win32, aunque todavía se debe conceder acceso cuando se crean los objetos.

Comentarios

Los objetos con nombre de las aplicaciones empaquetadas están aislados de forma predeterminada para conservar la seguridad y garantizar la compatibilidad con eventos del ciclo de vida de la aplicación, como la suspensión y la finalización. El uso compartido de objetos con nombre entre aplicaciones presenta restricciones de enlace y control de versiones estrictas y requiere que cada aplicación sea resistente al ciclo de vida de otros usuarios. Por estos motivos, se recomienda compartir solo objetos con nombre entre aplicaciones del mismo publicador.