IDisplayDeviceInterop::CreateSharedHandle 方法 (windows.devices.display.core.interop.h)

对于 DisplaySurfaceDisplayFence 对象,创建可用于与 Direct3D 或其他图形 API 互操作的共享句柄。

语法

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

参数

pObject

指向 DisplaySurfaceDisplayFence 对象的 IUnknown 接口的指针。

pSecurityAttributes

指向 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 句柄”的任何函数,具体取决于) 传递的对象,前提是调用方已被授予访问权限。 下面是一些示例。

多个进程可以具有同一对象的句柄,从而允许使用 对象进行进程间同步或共享。 可以使用以下对象共享机制。

使用 CloseHandle 函数关闭句柄。 进程终止时,系统会自动关闭句柄。 当对象的最后一个句柄已关闭且其最后一个接口引用已释放时,该对象将被销毁。

要求

要求
最低受支持的客户端 Windows 10内部版本 20348
最低受支持的服务器 Windows 10内部版本 20348
目标平台 Windows
标头 windows.devices.display.core.interop.h
Library d3d12.lib
DLL d3d12.dll