Dela via


Dela namngivna objekt

Det här avsnittet beskriver hur du delar namngivna objekt mellan UWP-program (Universal Windows Platform) och Win32-program.

Namngivna objekt i paketerade program

Namngivna objekt är ett enkelt sätt för processer att dela objekthandtag. När en process har skapat ett namngivet objekt kan andra processer använda namnet för att anropa lämplig funktion för att öppna en referens till objektet. Namngivna objekt används ofta för trådsynkronisering och kommunikation mellan processer.

Som standard kan paketerade program bara komma åt namngivna objekt som de har skapat. För att kunna dela namngivna objekt med paketerade program måste behörigheter anges när objekt skapas och namn måste kvalificeras när objekt öppnas.

Skapa namngivna objekt

Namngivna objekt skapas med motsvarande Create API:

Alla dessa API:er delar en LPSECURITY_ATTRIBUTES parameter som gör att anroparen kan ange åtkomstkontrollistor (ACL: er) för att styra vilka processer som kan komma åt objektet. För att kunna dela namngivna objekt med paketerade program måste behörighet beviljas i ACL:erna när de namngivna objekten skapas.

Säkerhetsidentifierare (SID) representerar identiteter i ACL:er. Varje paketerat program har ett eget SID baserat på paketfamiljenamnet. Du kan generera SID för ett paketerat program genom att skicka dess paketfamiljenamn till DeriveAppContainerSidFromAppContainerName.

Anmärkning

Paketfamiljenamnet finns via paketmanifestredigeraren i Visual Studio under utvecklingstiden, via Partnercenter för program som publicerats via Microsoft Store eller via Kommandot Get-AppxPackage PowerShell för program som redan är installerade.

Det här exemplet visar det grundläggande mönster som krävs för att ACL ett namngivet objekt. Om du vill dela namngivna objekt med paketerade program skapar du en EXPLICIT_ACCESS struktur för varje program:

Genom att fylla i parametern LPSECURITY_ATTRIBUTES i Create anrop med EXPLICIT_ACCESS regler för paketerade program kan du ge åtkomst till dessa program för att öppna det namngivna objektet.

Anmärkning

Win32-program kan komma åt alla namngivna objekt som skapats av paketerade program så länge de kvalificerar objektnamnen när de öppnas. De behöver inte beviljas åtkomst.

Öppna namngivna objekt

Namngivna objekt öppnas genom att ett namn skickas till motsvarande Open API:

Namngivna objekt som skapats av ett paketerat program skapas inom programmets namnområde, även kallat den namngivna objektsökvägen. När du öppnar namngivna objekt som skapats av ett paketerat program måste objektnamnen föregås av det skapande programmets namngivna objektsökväg.

GetAppContainerNamedObjectPath returnerar den namngivna objektsökvägen för ett paketerat program baserat på dess SID. Du kan generera SID för ett paketerat program genom att skicka dess paketfamiljenamn till DeriveAppContainerSidFromAppContainerName.

Anmärkning

Paketfamiljenamnet finns via paketmanifestredigeraren i Visual Studio under utvecklingstiden, via Partnercenter för program som publicerats via Microsoft Store eller via Kommandot Get-AppxPackage PowerShell för program som redan är installerade.

När du öppnar namngivna objekt som skapats av ett paketerat program använder du formatet <PATH>\<NAME>:

  • Ersätt <PATH> med det skapande programmets namngivna objektsökväg.
  • Ersätt <NAME> med objektnamnet.

Anmärkning

Prefixering av objektnamn med <PATH> krävs endast om ett paketerat program har skapat objektet. Namngivna objekt som skapats av Win32-program behöver inte vara kvalificerade, men åtkomst måste fortfarande beviljas när objekten skapas.

Anmärkningar

Namngivna objekt i paketerade program isoleras som standard för att bevara säkerheten och säkerställa stöd för programlivscykelhändelser som avstängning och avslutning. Delning av namngivna objekt mellan program medför snäva bindnings- och versionsbegränsningar och kräver att varje program är motståndskraftigt mot andras livscykel. Därför rekommenderar vi att du bara delar namngivna objekt mellan program från samma utgivare.