Udostępnij przez


Udostępnianie nazwanych obiektów

W tym temacie opisano sposób udostępniania nazwanych obiektów między aplikacjami platformy uniwersalnej systemu Windows (UWP) i aplikacjami Win32.

Obiekty nazwane w spakowanych aplikacjach

Obiekty nazwane umożliwiają łatwe udostępnianie dojść obiektów przez procesy. Po utworzeniu nazwanego obiektu inne procesy mogą użyć nazwy w celu wywołania odpowiedniej funkcji w celu otwarcia dojścia do obiektu. Obiekty nazwane są często używane do synchronizacji wątków i komunikacji między procesami .

Domyślnie spakowane aplikacje mogą uzyskiwać dostęp tylko do nazwanych obiektów, które same utworzyły. Aby współużytkować nazwane obiekty w spakowanych aplikacjach, należy ustawić uprawnienia podczas tworzenia obiektów, a nazwy muszą być kwalifikowane podczas otwierania obiektów.

Tworzenie nazwanych obiektów

Nazwane obiekty są tworzone przy użyciu odpowiedniego interfejsu API Create:

Wszystkie te interfejsy API współużytkują LPSECURITY_ATTRIBUTES parametr, który umożliwia obiektowi wywołującym określenie list kontroli dostępu (ACL) w celu kontrolowania procesów, które mogą uzyskiwać dostęp do obiektu. Aby współużytkować nazwane obiekty z spakowanymi aplikacjami, uprawnienia muszą zostać przyznane w listach ACL podczas tworzenia nazwanych obiektów.

Identyfikatory zabezpieczeń (SIDs) reprezentują tożsamości w listach kontroli dostępu (ACL). Każda spakowana aplikacja ma własny identyfikator SID na podstawie nazwy rodziny pakietów. Identyfikator SID spakowanej aplikacji można wygenerować, przekazując nazwę rodziny pakietów do funkcji DeriveAppContainerSidFromAppContainerName.

Uwaga / Notatka

Nazwa rodziny pakietów można znaleźć za pośrednictwem edytora manifestu pakietu w programie Visual Studio w czasie programowania, za pośrednictwem Centrum partnerskiego dla aplikacji opublikowanych za pośrednictwem Sklepu Microsoft lub za pomocą polecenia Get-AppxPackage programu PowerShell dla aplikacji, które są już zainstalowane.

W tym przykładzie przedstawiono podstawowy wzorzec potrzebny do zastosowania listy ACL dla obiektu nazwanego. Aby udostępnić nazwane obiekty spakowanym aplikacjom, utwórz strukturę EXPLICIT_ACCESS dla każdej aplikacji:

Wypełnianie parametru LPSECURITY_ATTRIBUTES w wywołaniach Create regułami EXPLICIT_ACCESS dla spakowanych aplikacji umożliwia przyznanie dostępu do tych aplikacji w celu otwarcia nazwanego obiektu.

Uwaga / Notatka

Aplikacje Win32 mogą uzyskiwać dostęp do wszystkich nazwanych obiektów utworzonych przez spakowane aplikacje, o ile kwalifikują nazwy obiektów podczas ich otwierania. Nie trzeba udzielać im dostępu.

Otwieranie nazwanych obiektów

Nazwane obiekty są otwierane poprzez przekazanie ich nazwy do odpowiedniego API Open.

Obiekty nazwane utworzone przez spakowaną aplikację są tworzone w przestrzeni nazw aplikacji, znanej również jako ścieżka obiektu nazwanego. Podczas otwierania nazwanych obiektów utworzonych przez spakowaną aplikację nazwy obiektów muszą być poprzedzone nazwą ścieżki obiektu tworzenia aplikacji.

Polecenie GetAppContainerNamedObjectPath zwróci nazwaną ścieżkę obiektu dla spakowanej aplikacji na podstawie identyfikatora SID. Identyfikator SID spakowanej aplikacji można wygenerować, przekazując nazwę rodziny pakietów do funkcji DeriveAppContainerSidFromAppContainerName.

Uwaga / Notatka

Nazwa rodziny pakietów można znaleźć za pośrednictwem edytora manifestu pakietu w programie Visual Studio w czasie programowania, za pośrednictwem Centrum partnerskiego dla aplikacji opublikowanych za pośrednictwem Sklepu Microsoft lub za pomocą polecenia Get-AppxPackage programu PowerShell dla aplikacji, które są już zainstalowane.

Podczas otwierania nazwanych obiektów utworzonych przez spakowana aplikację użyj formatu <PATH>\<NAME>:

  • Zastąp <PATH> ścieżką obiektu o nazwie z aplikacji tworzącej.
  • Zastąp <NAME> nazwą obiektu.

Uwaga / Notatka

Prefiksowanie nazw obiektów z <PATH> jest wymagane tylko wtedy, gdy spakowana aplikacja utworzyła obiekt. Obiekty nazwane, które są tworzone przez aplikacje Win32, nie muszą być specyfikowane, choć dostęp musi być nadal udzielany podczas ich tworzenia.

Uwagi

Obiekty o nazwach własnych w spakowanych aplikacjach są domyślnie izolowane w celu zachowania zabezpieczeń i zapewnienia obsługi zdarzeń cyklu życia aplikacji, takich jak zawieszenie i zakończenie. Udostępnianie nazwanych obiektów w aplikacjach wprowadza ścisłe ograniczenia powiązań i przechowywania wersji oraz wymaga, aby każda aplikacja mogła być odporna na cykl życia innych. Z tych powodów zaleca się udostępnianie tylko nazwanych obiektów między aplikacjami z tego samego wydawcy.