ID3D11Device1::OpenSharedResource1 方法 (d3d11_1.h)

向设备授予对句柄引用并在其他设备上创建的共享资源的访问权限。 必须事先将资源创建为共享资源,并指定它使用 NT 句柄 (也就是说,) 设置 D3D11_RESOURCE_MISC_SHARED_NTHANDLE 标志。

语法

HRESULT OpenSharedResource1(
  [in]  HANDLE hResource,
  [in]  REFIID returnedInterface,
  [out] void   **ppResource
);

参数

[in] hResource

要打开的资源的句柄。 有关此参数的详细信息,请参阅备注。

[in] returnedInterface

资源接口的全局唯一标识符 (GUID) 。 有关此参数的详细信息,请参阅备注。

[out] ppResource

指向变量的指针,该变量接收指向要访问的共享资源对象接口的指针。

返回值

此方法返回 Direct3D 11 返回代码之一。 如果访问资源的权限无效,此方法还会返回E_ACCESSDENIED。

适用于 Windows 7 的平台更新: 在安装了适用于 Windows 7 的平台更新的 Windows 7 或 Windows Server 2008 R2 上,由于使用了 NTHANDLES,OpenSharedResource1 将失败并E_NOTIMPL。 有关 Windows 7 平台更新的详细信息,请参阅 适用于 Windows 7 的平台更新

注解

OpenSharedResource1 的行为类似于 ID3D11Device::OpenSharedResource 方法的行为;每次调用 OpenSharedResource1 来访问资源都会创建一个新的资源对象。 换句话说,如果调用 OpenSharedResource1 两次并将同一资源句柄传递给 hResource,则会收到两个具有不同 IUnknown 指针的资源对象。

在两个设备之间共享资源

  1. 通过设置 D3D11_RESOURCE_MISC_SHARED_NTHANDLE 标志, 将资源创建为共享资源,并指定它使用 NT 句柄。
  2. 使用 __uuidof () 宏获取资源接口的 REFIID 或 GUID。 例如,__uuidof (ID3D11Texture2D) 检索 2D 纹理接口的 GUID。
  3. 查询 IDXGIResource1 接口的资源。
  4. 调用 IDXGIResource1::CreateSharedHandle 方法以获取资源的唯一句柄。

示例

HANDLE handle = GetSharedHandleFromOtherProcess();
ID3D11Device1* pDevice;
ID3D11Texture2D* pTexture2D;

pDevice->OpenSharedResource1(
          handle, 
          __uuidof(ID3D11Texture2D), 
         (void**)&pTexture2D);

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 适用于 Windows Server 2008 R2 的Windows Server 2012和平台更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d3d11_1.h
Library D3D11.lib

另请参阅

ID3D11Device1