次の方法で共有


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*

2 つの独立した関連データ メンバーを含む SECURITY_ATTRIBUTES 構造体へのポインター。オプションのセキュリティ記述子と、子プロセスが返されたハンドルを継承できるかどうかを決定する ブール 値。

アプリケーションが作成する可能性がある子プロセスが CreateSharedHandle によって返されるハンドルを継承しないようにする場合、および返されるハンドルに関連付けられているリソースで既定のセキュリティ記述子を取得する場合は、このパラメーターを NULL に設定します。

構造体の lpSecurityDescriptor メンバーは、リソースの SECURITY_DESCRIPTOR を指定します。 返されるハンドルに関連付けられているリソースに既定のセキュリティ記述子をランタイムが割り当てる場合は、このメンバーを NULL に設定します。 リソースの既定のセキュリティ記述子の ACL は、作成者のプライマリ トークンまたは偽装トークンから取得されます。 詳細については、「 同期オブジェクトのセキュリティとアクセス権」を参照してください。

Access

種類: DWORD

現在、このパラメーターが受け取る値はGENERIC_ALLのみです。

[in, optional] Name

種類: LPCWSTR

共有ヒープに関連付ける名前を含む NULL で終わる UNICODE 文字列。 名前はMAX_PATH文字に制限されています。 名前の比較では大文字と小文字が区別されます。

Name が既存のリソースの名前と一致する場合、CreateSharedHandleDXGI_ERROR_NAME_ALREADY_EXISTSで失敗します。 これは、これらのオブジェクトが同じ名前空間を共有しているために発生します。

名前には、グローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global" または "Local" プレフィックスを付けることができます。 名前の残りの部分には、円記号 (\) を除く任意の文字を含めることができます。 詳細については、「 カーネル オブジェクトの名前空間」を参照してください。 ターミナル サービス セッションを使用して、高速ユーザー切り替えが実装されます。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関するガイドラインに従う必要があります。

オブジェクトは、プライベート名前空間に作成できます。 詳細については、「 オブジェクトの名前空間」を参照してください。

[out] pHandle

型: HANDLE*

共有するリソースに NT HANDLE 値を受け取る変数へのポインター。 このハンドルを呼び出しで使用して、リソースにアクセスできます。

戻り値

種類: HRESULT

成功した場合はS_OKを返します。それ以外の場合は、次のいずれかの値を返します。

  • パラメーター の 1 つが無効な場合にDXGI_ERROR_INVALID_CALLします。
  • 共有 するリソースの指定された名前が既に別のリソースに関連付けられている場合は、DXGI_ERROR_NAME_ALREADY_EXISTSします。
  • オブジェクトが保護された名前空間に作成されているかどうかをE_ACCESSDENIEDします。
  • ハンドルを作成するのに十分なメモリが使用できない場合は、E_OUTOFMEMORYします。
  • Direct3D 12リターン コードに関するトピックで説明されているその他のエラー コードが考えられます。

解説

ヒープとコミット済みリソースの両方を共有できます。 コミットされたリソースを共有すると、暗黙的なヒープとコミットされたリソースの説明が共有されます。これにより、互換性のあるリソース記述を別のデバイスからヒープにマップできます。

Direct3D 11 とDirect3D 12相互運用のシナリオでは、共有フェンスが Id3D11Device5::OpenSharedFence メソッドを使用して DirectX 11 で開き、共有リソースが ID3D11Device::OpenSharedResource1 メソッドで開かれます。

Direct3D 12の場合、共有ハンドルは ID3D12Device::OpenSharedHandle メソッドまたは ID3D12Device::OpenSharedHandleByName メソッドで開かれます。

要件

   
対象プラットフォーム Windows
ヘッダー d3d12.h
Library D3D12.lib
[DLL] D3D12.dll

関連項目

ID3D12Device