Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico explica como compartilhar objetos nomeados entre aplicativos da Plataforma Universal do Windows (UWP) e aplicativos Win32.
Objetos nomeados em aplicações pacoteadas
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 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 Create correspondente:
- CriarEvento
- CreateFileMapping
- CreateMutex
- CreateSemaphore
- CreateWaitableTimer
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 dentro das 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 baseado em seu nome de família de pacote. 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 do pacote 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 pela Microsoft Store ou por meio do comando Get-AppxPackage PowerShell para aplicativos que já estão instalados.
Este exemplo demonstra o padrão básico necessário para ACL 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 pretendido grfInheritance = NO_INHERITANCETrustee.TrusteeForm = TRUSTEE_IS_SIDTrustee.TrusteeType = TRUSTEE_IS_USER-
Trustee.ptstrName =o SID adquirido de DeriveAppContainerSidFromAppContainerName
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 de objetos ao abri-los . Não é necessário conceder-lhes acesso.
Abrindo objetos nomeados
Os objetos nomeados são abertos passando um nome para a correspondente API Open.
- OpenEvento
- OpenFileMapping
- OpenMutex
- OpenSemaphore
- OpenWaitableTimer
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 do pacote 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 pela Microsoft Store ou por meio do comando Get-AppxPackage 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
Adicionar o prefixo <PATH> aos nomes de objetos só é necessário se uma aplicação empacotada criou 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.
Observações
Os objetos nomeados em aplicativos empacotados são isolados por padrão para preservar a segurança e garantir suporte para eventos do ciclo de vida do aplicativo, como suspensão e encerramento. O compartilhamento de objetos nomeados entre aplicativos introduz restrições rígidas de vinculaçã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.