Compartilhamento de objetos nomeados
Este tópico explica como compartilhar objetos nomeados entre aplicativos UWP (Plataforma Universal do Windows) e aplicativos Win32.
Objetos nomeados em aplicativos empacotados
Os objetos nomeados fornecem uma maneira fácil para os processos compartilharem identificadores de objetos. Depois que um processo cria um objeto nomeado, outros processos podem usar o nome para chamar a função apropriada para abrir um identificador para o objeto. Os objetos nomeados são comumente usados para sincronização de threads e 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 correspondente Create
:
Todas essas APIs compartilham um LPSECURITY_ATTRIBUTES
parâmetro que permite que o chamador especifique listas de controle de acesso (ACLs) 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.
Os identificadores de segurança (SIDs) representam identidades dentro de ACLs. Cada aplicativo empacotado tem seu próprio SID com base em seu nome de família de pacotes. Você pode gerar o SID para um aplicativo empacotado passando seu nome de 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 Get-AppxPackage do PowerShell 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:
grfAccessMode = GRANT_ACCESS
grfAccessPermissions =
permissões apropriadas com base no objeto e no uso pretendidogrfInheritance = NO_INHERITANCE
Trustee.TrusteeForm = TRUSTEE_IS_SID
Trustee.TrusteeType = TRUSTEE_IS_USER
Trustee.ptstrName =
o SID adquirido de DeriveAppContainerSidFromAppContainerName
Ao preencher o LPSECURITY_ATTRIBUTES
parâmetro em Create
chamadas com EXPLICIT_ACCESS
regras 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 de objeto ao abri-los. Eles não precisam ter acesso.
Abrindo objetos nomeados
Os objetos nomeados são abertos passando um nome para uma API correspondente Open
:
Os objetos nomeados criados por um aplicativo empacotado são criados dentro do namespace do aplicativo, também conhecido como caminho do objeto nomeado. Ao abrir objetos nomeados criados por um aplicativo empacotado, os nomes dos objetos devem ser prefixados com o caminho do 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 seu nome de 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 Get-AppxPackage do PowerShell 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 precificação de nomes de objeto com <PATH>
só será necessária se um aplicativo empacotado tiver criado o objeto. Os objetos nomeados criados por aplicativos Win32 não precisam ser qualificados, embora o acesso ainda deva ser concedido quando os objetos são criados.
Comentários
Os 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 de outros. Por esses motivos, é recomendável compartilhar apenas objetos nomeados entre aplicativos do mesmo editor.