Поделиться через


Предоставление общего доступа к именованным объектам

В этом разделе объясняется, как совместно использовать именованные объекты между приложениями универсальная платформа Windows (UWP) и приложениями Win32.

Именованные объекты в упакованных приложениях

Именованные объекты предоставляют простой способ совместного использования дескрипторов объектов. После создания именованного объекта другие процессы могут использовать имя для вызова соответствующей функции, чтобы открыть дескриптор для объекта. Именованные объекты обычно используются для синхронизации потоков и взаимодействия между процессами.

По умолчанию упакованные приложения могут получать доступ только к созданным им объектам. Чтобы предоставить общий доступ к именованным объектам с упакованными приложениями, необходимо задать разрешения при создании объектов, а имена должны быть квалифицированы при открытии объектов.

Создание именованных объектов

Именованные объекты создаются с помощью соответствующего Create API:

Все эти API предоставляют общий LPSECURITY_ATTRIBUTES доступ к параметру, который позволяет вызывающей программе указывать списки управления доступом (ACL) для управления доступом к объекту. Чтобы предоставить общий доступ к именованным объектам с упакованными приложениями, необходимо предоставить разрешение в списках управления доступом при создании именованных объектов.

Идентификаторы безопасности (SID) представляют удостоверения в списках управления доступом. У каждого упаковаемого приложения есть собственный идентификатор безопасности на основе имени семейства пакетов. Идентификатор безопасности для упакованного приложения можно создать, передав имя семейства пакетов в DeriveAppContainerSidFromAppContainerName.

Примечание.

Имя семейства пакетов можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, через Центр партнеров для приложений, опубликованных в Microsoft Store, или с помощью команды Get-AppxPackage PowerShell для приложений, которые уже установлены.

В этом примере показан базовый шаблон, необходимый для ACL именованного объекта. Чтобы совместно использовать именованные объекты с упакованными приложениями, создайте структуру EXPLICIT_ACCESS для каждого приложения:

Заполняя LPSECURITY_ATTRIBUTES параметр в вызовах EXPLICIT_ACCESS правилами упакованных Create приложений, вы можете предоставить доступ к этим приложениям для открытия именованного объекта.

Примечание.

Приложения Win32 могут получить доступ ко всем именованным объектам, созданным упакованными приложениями, если они определяют имена объектов при открытии. Им не нужно предоставлять доступ.

Открытие именованных объектов

Именованные объекты открываются путем передачи имени соответствующему Open API:

Именованные объекты, созданные упакованным приложением, создаются в пространстве имен приложения, иначе называется именованным путем к объекту. При открытии именованных объектов, созданных упакованным приложением, имена объектов должны быть префиксированы с помощью именованного пути к объекту создания приложения.

GetAppContainerNamedObjectPath возвращает именованный путь к объекту для упакованного приложения на основе идентификатора безопасности. Идентификатор безопасности для упакованного приложения можно создать, передав имя семейства пакетов в DeriveAppContainerSidFromAppContainerName.

Примечание.

Имя семейства пакетов можно найти с помощью редактора манифеста пакета в Visual Studio во время разработки, через Центр партнеров для приложений, опубликованных в Microsoft Store, или с помощью команды Get-AppxPackage PowerShell для приложений, которые уже установлены.

При открытии именованных объектов, созданных упакованным приложением, используйте формат <PATH>\<NAME>:

  • Замените <PATH> на именованный путь к объекту для создания приложения.
  • Замените <NAME> именем объекта.

Примечание.

Имена <PATH> объектов с префиксом требуются только в том случае, если упакованое приложение создало объект. Именованные объекты, созданные приложениями Win32, не должны быть квалифицированы, хотя доступ по-прежнему должен предоставляться при создании объектов.

Замечания

Именованные объекты в упакованных приложениях по умолчанию изолированы для сохранения безопасности и обеспечения поддержки событий жизненного цикла приложения, таких как приостановка и завершение. Совместное использование именованных объектов в приложениях вводит жесткие ограничения привязки и управления версиями и требует, чтобы каждое приложение было устойчивым к жизненному циклу других пользователей. По этим причинам рекомендуется совместно использовать только именованные объекты между приложениями из одного издателя.