ID3D12Device::CreateSharedHandle 方法 (d3d12.h)

建立堆積、資源或柵欄物件的共用控制碼。

語法

HRESULT CreateSharedHandle(
  [in]           ID3D12DeviceChild         *pObject,
  [in, optional] const SECURITY_ATTRIBUTES *pAttributes,
                 DWORD                     Access,
  [in, optional] LPCWSTR                   Name,
  [out]          HANDLE                    *pHandle
);

參數

[in] pObject

類型: ID3D12DeviceChild*

ID3D12DeviceChild介面的指標,代表要建立以進行共用的堆積、資源或柵欄物件。 支援下列衍生自 ID3D12DeviceChild) 的 (介面:

[in, optional] pAttributes

類型:const SECURITY_ATTRIBUTES*

包含兩個個別但相關資料成員 之SECURITY_ATTRIBUTES 結構的指標:選擇性的安全性描述元,以及判斷子進程是否可以繼承傳回控制碼的 布林 值。

如果您想要讓應用程式建立的子進程不繼承CreateSharedHandle所傳回的控制碼,而且您希望與傳回控制碼相關聯的資源取得預設安全性描述項,請將此參數設定為Null

結構的 lpSecurityDescriptor 成員會指定資源的 SECURITY_DESCRIPTOR 。 如果您想要讓執行時間將預設安全性描述元指派給與傳回控制碼相關聯的資源,請將此成員設定為 Null 。 資源的預設安全性描述元中的 ACL 來自建立者的主要或模擬權杖。 如需詳細資訊,請參閱 同步處理物件安全性和存取權限

Access

類型: DWORD

此參數目前唯一接受的值是GENERIC_ALL。

[in, optional] Name

類型: LPCWSTR

Null終止的UNICODE字串,其中包含要與共享堆積相關聯的名稱。 名稱限制為MAX_PATH個字元。 名稱比較會區分大小寫。

如果 Name 符合現有資源的名稱, CreateSharedHandle 會因為 DXGI_ERROR_NAME_ALREADY_EXISTS而失敗。 這是因為這些物件共用相同的命名空間。

名稱可以有 「Global」 或 「Local」 前置詞,以在全域或會話命名空間中明確建立物件。 名稱的其餘部分可以包含反斜線字元 (\) 以外的任何字元。 如需詳細資訊,請參閱 核心物件命名空間。 使用終端機服務會話實作快速使用者切換。 核心物件名稱必須遵循終端機服務概述的指導方針,讓應用程式可以支援多個使用者。

物件可以在私用命名空間中建立。 如需詳細資訊,請參閱 物件命名空間

[out] pHandle

類型: HANDLE*

接收要共用之資源 NT HANDLE 值的變數指標。 您可以在呼叫中使用這個控制碼來存取資源。

傳回值

類型: HRESULT

如果成功,則傳回S_OK;否則,會傳回下列其中一個值:

  • 如果 其中一個參數無效,DXGI_ERROR_INVALID_CALL。
  • 如果 要共用的資源提供名稱已經與另一個資源相關聯,DXGI_ERROR_NAME_ALREADY_EXISTS。
  • 如果物件是在受保護的命名空間中建立,E_ACCESSDENIED。
  • 如果沒有足夠的記憶體無法建立控制碼,E_OUTOFMEMORY。
  • Direct3D 12 傳回碼主題中可能描述的其他錯誤碼。

備註

可以共用堆積和已認可的資源。 共用認可的資源會與已認可的資源描述一起共用隱含堆積,讓相容的資源描述可以對應至另一部裝置的堆積。

針對 Direct3D 11 和 Direct3D 12 Interop 案例,共用柵欄會以 ID3D11Device5::OpenSharedFence 方法在 DirectX 11 中開啟,並使用 ID3D11Device::OpenSharedResource1 方法開啟共用資源。

針對 Direct3D 12,會以 ID3D12Device::OpenSharedHandle 或 ID3D12Device::OpenSharedHandleByName 方法開啟共用控制碼。

需求

   
目標平台 Windows
標頭 d3d12.h
程式庫 D3D12.lib
Dll D3D12.dll

另請參閱

ID3D12Device