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 構造体へのポインター。省略可能なセキュリティ記述子と、子プロセスが返されたハンドルを継承できるかどうかを決定するブール値。
アプリケーションが作成する可能性がある子プロセスが CreateSharedHandle によって返されるハンドルを継承しないようにする場合、および返されるハンドルに関連付けられているリソースで既定のセキュリティ記述子を取得する場合は、このパラメーターnullptr
を に設定します。
構造体の 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 文字に制限されています。 名前の比較では大文字と小文字が区別されます。
Name が既存のリソースの名前と一致する場合、CreateSharedHandle はDXGI_ERROR_NAME_ALREADY_EXISTSで失敗します。 これは、これらのオブジェクトが同じ名前空間を共有しているために発生します。
名前には、グローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global" または "Local" プレフィックスを付けることができます。 名前の残りの部分には、円記号 (\
) を除く任意の文字を含めることができます。 詳細については、「 カーネル オブジェクトの名前空間」を参照してください。 高速ユーザー切り替えは、ターミナル サービス セッションを使用して実装されます。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関するガイドラインに従う必要があります。
オブジェクトは、プライベート名前空間に作成できます。 詳細については、「 オブジェクトの名前空間」を参照してください。
pHandle
その新しい共有 ハンドル を受け取る HANDLE へのポインター。
戻り値
種類: HRESULT
このメソッドは 、成功した場合はS_OK を返します。それ以外の場合は、失敗した理由を示すエラー コードを返します。 成功した場合、 pHandle は常に新しく作成されたハンドルを指します。
注釈
CreateSharedHandle によって返されるハンドルは、呼び出し元にアクセス権が付与されていれば、GPU サーフェスまたはフェンスへの "NT ハンドル" を必要とする任意の関数で使用できます (渡されたオブジェクトに応じて)。 次に例をいくつか示します。
- ID3D12Device::OpenSharedHandle を使用して、サーフェスとフェンスをDirect3D 12と共有します。
- ID3D11Device1::OpenSharedResource を使用して、Direct3D 11 でサーフェスを共有します。
- ID3D11Device5::OpenSharedFence を使用して、Direct3D 11 とフェンスを共有します。
複数のプロセスに同じオブジェクトのハンドルを含めることができるため、プロセス間同期または共有に オブジェクトを使用できます。 次のオブジェクト共有メカニズムを使用できます。
- CreateSharedHandle の pSecurityAttributes パラメーターで継承が有効な場合、CreateProcess 関数によって作成された子プロセスは、サーフェス オブジェクトまたはフェンス オブジェクトにハンドルを継承できます。
- プロセスでは、 DuplicateHandle 関数の呼び出しでオブジェクト ハンドルを指定して、別のプロセスで使用できる重複するハンドルを作成できます。
- プロセスでは、 OpenSharedHandle または ID3D12Device::OpenSharedHandleByName 関数の呼び出しでオブジェクトの名前を指定できます。
CloseHandle 関数を使用してハンドルを閉じます。 プロセスが終了すると、ハンドルが自動的に閉じられます。 オブジェクトは、最後のハンドルが閉じられ、最後のインターフェイス参照が解放されると破棄されます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 ビルド 20348 |
サポートされている最小のサーバー | Windows 10 ビルド 20348 |
対象プラットフォーム | Windows |
ヘッダー | windows.devices.display.core.interop.h |
Library | d3d12.lib |
[DLL] | d3d12.dll |