共用方式為


共用命名物件

本主題說明如何在通用 Windows 平臺 (UWP) 應用程式和 Win32 應用程式之間共用具名物件。

封裝應用程式中的具名物件

具名物件 提供一個簡便的方法讓程序共用物件句柄。 在程序建立具名對象之後,其他程序可以使用名稱呼叫適當的函式來開啟該對象的控制代碼。 具名物件通常用於 執行緒同步處理跨行程通訊

根據預設,封裝的應用程式只能存取他們建立的具名物件。 若要與封裝的應用程式共用具名對象,必須在建立物件時設定許可權,而且在開啟物件時必須限定名稱。

建立具名物件

具名物件是使用對應的 Create API 建立:

所有這些 API 都會共用 LPSECURITY_ATTRIBUTES 參數,讓呼叫者能夠指定 存取控制清單 (ACL),以控制哪些進程可以存取物件。 若要與封裝的應用程式共用具名物件,建立具名物件時,必須在 ACL 內授與許可權。

安全性識別碼 (SID) 代表 ACL 內的身分識別。 每個封裝的應用程式都有自己的 SID,以其套件系列名稱為基礎。 您可以將封裝應用程式系列名稱傳遞至 DeriveAppContainerSidFromAppContainerName,以產生封裝應用程式的 SID。

備註

開發期間可以透過 Visual Studio 中的套件清單編輯器找到套件系列名稱,透過 合作夥伴中心 查找經由 Microsoft 市集發行的應用程式,或者使用 PowerShell 的 Get-AppxPackage 命令查找已安裝的應用程式。

此範例 示範 ACL 具名物件所需的基本模式。 若要與已封裝的應用程式共用具名物件,請為每個應用程式建置 EXPLICIT_ACCESS 結構:

藉由在 LPSECURITY_ATTRIBUTES 呼叫中利用 Create 規則填入 EXPLICIT_ACCESS 參數,您可以授予這些封裝應用程式開啟具名物件的存取權。

備註

只要在 開啟物件時,Win32 應用程式就可以存取封裝應用程式所建立的所有具名物件。 他們不需要被授予存取權。

開啟具名物件

具名物件會藉由將名稱傳遞至對應的 Open API 來開啟:

封裝應用程式所建立的具名物件是在應用程式的命名空間內建立,否則稱為具名對象路徑。 開啟封裝應用程式所建立的具名物件時,物件名稱前面必須加上建立應用程式的具名對象路徑。

GetAppContainerNamedObjectPath 會根據其 SID 傳回已封裝應用程式的具名物件路徑。 您可以將封裝應用程式系列名稱傳遞至 DeriveAppContainerSidFromAppContainerName,以產生封裝應用程式的 SID。

備註

開發期間可以透過 Visual Studio 中的套件清單編輯器找到套件系列名稱,透過 合作夥伴中心 查找經由 Microsoft 市集發行的應用程式,或者使用 PowerShell 的 Get-AppxPackage 命令查找已安裝的應用程式。

開啟封裝應用程式所建立的具名物件時,請使用 格式 <PATH>\<NAME>

  • <PATH> 替換為建立應用程式的具名物件路徑。
  • 以物件名稱取代 <NAME>

備註

只有在封裝的應用程式建立物件時,才需要以 <PATH> 為物件名稱加上前置詞。 Win32 應用程式所建立的具名物件不需要限定,不過在物件 建立時,仍必須授予存取權。

備註

封裝應用程式中的具名對象預設會隔離,以保留安全性,並確保支援暫停和終止等應用程式生命週期事件。 跨應用程式共用具名物件會帶來緊密的系結和版本控制約束,並要求每個應用程式都能夠適應其他應用程式的生命週期。 基於這些理由,建議只在同一個發行者的應用程式之間共用具名物件。