Condivisione di oggetti denominati
Questo argomento illustra come condividere oggetti denominati tra applicazioni della piattaforma UWP (Universal Windows Platform) e applicazioni Win32.
Oggetti denominati nelle applicazioni in pacchetto
Gli oggetti denominati offrono ai processi un modo semplice di condividere gli handle degli oggetti. Dopo che un processo ha creato un oggetto denominato, altri processi possono usarne il nome per chiamare la funzione appropriata e aprire un handle all'oggetto. Gli oggetti denominati vengono comunemente usati per la sincronizzazione dei thread e la comunicazione interprocesso.
Per impostazione predefinita, le applicazioni in pacchetto possono accedere solo agli oggetti denominati creati. Per condividere oggetti denominati con applicazioni in pacchetto, le autorizzazioni devono essere impostate quando vengono creati gli oggetti e i nomi devono essere qualificati quando vengono aperti gli oggetti.
Creazione di oggetti denominati
Gli oggetti denominati vengono creati con un'API corrispondente Create
:
Tutte queste API condividono un LPSECURITY_ATTRIBUTES
parametro che consente al chiamante di specificare elenchi di controllo di accesso (ACL) per controllare quali processi possono accedere all'oggetto. Per condividere oggetti denominati con applicazioni in pacchetto, è necessario concedere l'autorizzazione all'interno degli elenchi di controllo di accesso quando vengono creati gli oggetti denominati.
Gli identificatori di sicurezza (SID) rappresentano le identità all'interno degli elenchi di controllo di accesso. Ogni applicazione in pacchetto ha il proprio SID in base al nome della famiglia di pacchetti. È possibile generare il SID per un'applicazione in pacchetto passando il nome della famiglia di pacchetti a DeriveAppContainerSidFromAppContainerName.
Nota
Il nome della famiglia di pacchetti è disponibile tramite l'editor del manifesto del pacchetto in Visual Studio durante lo sviluppo, tramite il Centro per i partner per le applicazioni pubblicate tramite Microsoft Store o tramite il comando PowerShell Get-AppxPackage per le applicazioni già installate.
In questo esempio viene illustrato il modello di base necessario per l'ACL di un oggetto denominato. Per condividere oggetti denominati con applicazioni in pacchetto, compilare una struttura EXPLICIT_ACCESS per ogni applicazione:
grfAccessMode = GRANT_ACCESS
grfAccessPermissions =
autorizzazioni appropriate in base all'oggetto e all'utilizzo previstogrfInheritance = NO_INHERITANCE
Trustee.TrusteeForm = TRUSTEE_IS_SID
Trustee.TrusteeType = TRUSTEE_IS_USER
Trustee.ptstrName =
SID acquisito da DeriveAppContainerSidFromAppContainerName
Popolando il LPSECURITY_ATTRIBUTES
parametro nelle Create
chiamate con EXPLICIT_ACCESS
regole per le applicazioni in pacchetto, è possibile concedere l'accesso a tali applicazioni per aprire l'oggetto denominato.
Nota
Le applicazioni Win32 possono accedere a tutti gli oggetti denominati creati dalle applicazioni in pacchetto purché qualifichino i nomi degli oggetti durante l'apertura. Non è necessario concedere l'accesso.
Apertura di oggetti denominati
Gli oggetti denominati vengono aperti passando un nome a un'API corrispondenteOpen
:
Gli oggetti denominati creati da un'applicazione in pacchetto vengono creati all'interno dello spazio dei nomi dell'applicazione, altrimenti noto come percorso dell'oggetto denominato. Quando si aprono oggetti denominati creati da un'applicazione in pacchetto, i nomi degli oggetti devono essere preceduti dal percorso dell'oggetto denominato dell'applicazione di creazione.
GetAppContainerNamedObjectPath restituirà il percorso dell'oggetto denominato per un'applicazione in pacchetto in base al relativo SID. È possibile generare il SID per un'applicazione in pacchetto passando il nome della famiglia di pacchetti a DeriveAppContainerSidFromAppContainerName.
Nota
Il nome della famiglia di pacchetti è disponibile tramite l'editor del manifesto del pacchetto in Visual Studio durante lo sviluppo, tramite il Centro per i partner per le applicazioni pubblicate tramite Microsoft Store o tramite il comando PowerShell Get-AppxPackage per le applicazioni già installate.
Quando si aprono oggetti denominati creati da un'applicazione in pacchetto, usare il formato <PATH>\<NAME>
:
- Sostituire
<PATH>
con il percorso dell'oggetto denominato dell'applicazione di creazione. - Sostituire
<NAME>
con il nome dell'oggetto.
Nota
Il prefisso dei nomi degli oggetti con <PATH>
è obbligatorio solo se un'applicazione in pacchetto ha creato l'oggetto. Gli oggetti denominati creati dalle applicazioni Win32 non devono essere qualificati, anche se l'accesso deve comunque essere concesso quando vengono creati gli oggetti.
Osservazioni:
Gli oggetti denominati nelle applicazioni in pacchetto sono isolati per impostazione predefinita per mantenere la sicurezza e garantire il supporto a eventi del ciclo di vita dell'applicazione, ad esempio sospensione e terminazione. La condivisione di oggetti denominati tra applicazioni introduce vincoli di binding e controllo delle versioni rigorosi e richiede che ogni applicazione sia resiliente al ciclo di vita di altri. Per questi motivi è consigliabile condividere solo oggetti denominati tra applicazioni dello stesso server di pubblicazione.