Compartilhar via


Compartilhamento de objetos nomeados

Este tópico explica como compartilhar objetos nomeados entre aplicativos da Plataforma Universal do Windows (UWP) e aplicativos Win32.

Objetos nomeados em aplicativos empacotados

Os objetos nomeados fornecem uma maneira fácil para os processos compartilharem identificadores de objeto. Depois que um processo tiver criado um objeto nomeado, outros processos poderão usar o nome para chamar a função apropriada para abrir um identificador para o objeto. Objetos nomeados geralmente são usados para de sincronização de thread e de comunicação entre processos.

Por padrão, os aplicativos empacotados só podem acessar objetos nomeados que eles criaram. Para compartilhar objetos nomeados com aplicativos empacotados, as permissões devem ser definidas quando os objetos são criados e os nomes devem ser qualificados quando os objetos são abertos.

Criando objetos nomeados

Os objetos nomeados são criados com uma API de Create correspondente:

Todas essas APIs compartilham um LPSECURITY_ATTRIBUTES parâmetro que permite ao chamador especificar ACLs (listas de controle de acesso) para controlar quais processos podem acessar o objeto. Para compartilhar objetos nomeados com aplicativos empacotados, a permissão deve ser concedida nas ACLs quando os objetos nomeados são criados.

Identificadores de Segurança (SIDs) representam identidades em ACLs. Cada aplicativo empacotado tem seu próprio SID com base no nome da família de pacotes. Você pode gerar o SID para um aplicativo empacotado passando o nome da família de pacotes para DeriveAppContainerSidFromAppContainerName.

Observação

O nome da família de pacotes pode ser encontrado por meio do editor de manifesto do pacote no Visual Studio, durante o tempo de desenvolvimento, por meio do Partner Center para aplicativos publicados na Microsoft Store, ou por meio do comando PowerShell Get-AppxPackage para aplicativos que já estão instalados.

Este exemplo demonstra o padrão básico necessário para ACL de um objeto nomeado. Para compartilhar objetos nomeados com aplicativos empacotados, crie uma estrutura EXPLICIT_ACCESS para cada aplicativo:

Ao preencher o parâmetro LPSECURITY_ATTRIBUTES em chamadas Create com regras de EXPLICIT_ACCESS para aplicativos empacotados, você pode conceder acesso a esses aplicativos para abrir o objeto nomeado.

Observação

Os aplicativos Win32 podem acessar todos os objetos nomeados criados por aplicativos empacotados, desde que qualifiquem os nomes dos objetos ao abri-los. Eles não precisam receber acesso.

Abrindo objetos nomeados

Os objetos nomeados são abertos ao se passar um nome para uma API Open apropriada.

  • Evento Aberto
  • OpenFileMapping
  • OpenMutex
  • OpenSemaphore
  • OpenWaitableTimer

Objetos nomeados criados por um aplicativo empacotado são criados dentro do namespace do aplicativo, também conhecido como o caminho do objeto nomeado. Ao abrir objetos nomeados criados por um aplicativo empacotado, os nomes dos objetos devem ser prefixados com o caminho de objeto nomeado do aplicativo de criação.

GetAppContainerNamedObjectPath retornará o caminho do objeto nomeado para um aplicativo empacotado com base em seu SID. Você pode gerar o SID para um aplicativo empacotado passando o nome da família de pacotes para DeriveAppContainerSidFromAppContainerName.

Observação

O nome da família de pacotes pode ser encontrado por meio do editor de manifesto do pacote no Visual Studio, durante o tempo de desenvolvimento, por meio do Partner Center para aplicativos publicados na Microsoft Store, ou por meio do comando PowerShell Get-AppxPackage para aplicativos que já estão instalados.

Ao abrir objetos nomeados criados por um aplicativo empacotado, use o formato <PATH>\<NAME>:

  • Substitua <PATH> pelo caminho do objeto nomeado do aplicativo de criação.
  • Substitua <NAME> pelo nome do objeto.

Observação

A prefixação de nomes de objeto com <PATH> só será necessária se um aplicativo empacotado tiver criado o objeto. Objetos nomeados criados por aplicativos Win32 não precisam ser qualificados, embora o acesso ainda precise ser concedido quando os objetos forem criados.

Observações

Objetos nomeados em aplicativos empacotados são isolados por padrão para preservar a segurança e garantir o suporte para eventos de ciclo de vida do aplicativo, como suspensão e encerramento. O compartilhamento de objetos nomeados entre aplicativos introduz restrições rígidas de associação e controle de versão e exige que cada aplicativo seja resiliente ao ciclo de vida dos outros aplicativos. Por esses motivos, é recomendável compartilhar apenas objetos nomeados entre aplicativos do mesmo editor.