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):
[in, optional] pAttributes
類型:const SECURITY_ATTRIBUTES*
包含兩個不同但相關數據成員之 SECURITY_ATTRIBUTES 結構的指標:選擇性的安全性描述元,以及 布爾值 值,決定子進程是否可以繼承傳回的句柄。
如果您想要讓應用程式建立的子進程不繼承 createSharedHandle所傳回的句柄,而且如果您希望與傳回句柄相關聯的資源取得預設安全性描述元,請將此參數設定為 NULL。
lpSecurityDescriptor 結構的成員會指定資源的 SECURITY_DESCRIPTOR。 如果您想要讓運行時間將預設安全性描述元指派給與傳回句柄相關聯的資源,請將這個成員設定為 NULL。 資源的預設安全性描述元中的 ACL 來自建立者的主要或模擬令牌。 如需詳細資訊,請參閱 Synchronization Object Security and Access Rights。
Access
類型:DWORD
目前此參數接受的唯一值是GENERIC_ALL。
[in, optional] Name
類型:LPCWSTR
NULL-terminated UNICODE 字串,其中包含要與共用堆積產生關聯的名稱。 名稱限制為MAX_PATH個字元。 名稱比較會區分大小寫。
如果 Name 符合現有資源的名稱,CreateSharedHandle 會失敗並 DXGI_ERROR_NAME_ALREADY_EXISTS。 這是因為這些對象共用相同的命名空間。
名稱可以有 「Global」 或 「Local」 前置詞,以明確在全域或會話命名空間中建立物件。 名稱的其餘部分可以包含反斜杠字元 (\) 以外的任何字元。 如需詳細資訊,請參閱 Kernel Object Namespaces。 使用終端機服務會話實作快速使用者切換。 核心物件名稱必須遵循終端機服務概述的指導方針,應用程式才能支援多個使用者。
物件可以在私人命名空間中建立。 如需詳細資訊,請參閱 物件命名空間。
[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 方法開啟。
要求
要求 | 價值 |
---|---|
目標平臺 | 窗戶 |
標頭 | d3d12.h |
連結庫 | D3D12.lib |
DLL | D3D12.dll |