次の方法で共有


IDisplayDeviceInterop::CreateSharedHandle メソッド (windows.devices.display.core.interop.h)

DisplaySurface または DisplayFence オブジェクトの場合は、Direct3D またはその他のグラフィックス API との相互運用に使用できる共有ハンドルを作成します。

構文

HRESULT CreateSharedHandle(
  IInspectable              *pObject,
  const SECURITY_ATTRIBUTES *pSecurityAttributes,
  DWORD                     Access,
  HSTRING                   Name,
  HANDLE                    *pHandle
);

パラメーター

pObject

DisplaySurface または DisplayFence オブジェクトの IUnknown インターフェイスへのポインター。

pSecurityAttributes

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

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

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

Access

リソースに対して要求されたアクセス権。 汎用アクセス権に加えて、サーフェスはこれらの値を使用できます。

  • DXGI_SHARED_RESOURCE_READ (0x80000000L)。 リソースへの読み取りアクセスを指定します。
  • DXGI_SHARED_RESOURCE_WRITE (1)。 リソースへの書き込みアクセスを指定します。

ビットごとの OR 演算を使用して、これらの値を組み合わせることができます。

pObject フェンスの場合は、GENERIC_ALLを使用する必要があります。

Name

型: LPCWSTR

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

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

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

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

pHandle

その新しい共有ハンドルを受け取る HANDLE へのポインター。

戻り値

型: HRESULT

このメソッドは、成功した場合は S_OK を返し、それ以外の場合は失敗した理由を示すエラー コードを返します。 成功した場合、pHandle は常に新しく作成されたハンドルを指します。

備考

CreateSharedHandle によって返されるハンドルは、呼び出し元にアクセス権が付与されている場合、GPU サーフェスまたはフェンスへの "NT ハンドル" を必要とする任意の関数で使用できます (渡されたオブジェクトに応じて)。 いくつかの例を次に示します。

複数のプロセスが同じオブジェクトのハンドルを持つ可能性があり、プロセス間の同期または共有にオブジェクトを使用できます。 次のオブジェクト共有メカニズムを使用できます。

  • CreateProcess 関数によって作成された子プロセスは、pSecurityAttributes が CreateSharedHandle のパラメーター 継承を有効にした場合、サーフェスまたはフェンス オブジェクト ハンドルを継承できます。
  • プロセスでは、DuplicateHandle 関数の呼び出しでオブジェクト ハンドルを指定して、別のプロセスで使用できる重複するハンドルを作成できます。
  • プロセスでは、OpenSharedHandle または ID3D12Device::OpenSharedHandleByName 関数の呼び出しで、オブジェクトの名前を指定できます。

CloseHandle 関数を使用してハンドルを閉じます。 プロセスが終了すると、システムはハンドルを自動的に閉じます。 最後のハンドルが閉じられ、最後のインターフェイス参照が解放されると、オブジェクトは破棄されます。

必要条件

要件 価値
サポートされる最小クライアント Windows 10 ビルド 20348
サポートされる最小サーバー Windows 10 ビルド 20348
ターゲット プラットフォーム の ウィンドウズ
ヘッダー windows.devices.display.core.interop.h
ライブラリ d3d12.lib
DLL d3d12.dll