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(0x800000000L)。 指定对资源的读取访问权限。
  • DXGI_SHARED_RESOURCE_WRITE(1)。 指定对资源的写入访问权限。

可以使用按位 OR 操作合并这些值。

如果 pObject 是围栏,则必须使用 GENERIC_ALL

Name

类型:LPCWSTR

一个以 null 结尾的 Unicode 字符串,其中包含要与共享堆关联的名称。 名称限制为 MAX_PATH 个字符。 名称比较区分大小写。

如果 名称 与现有资源的名称匹配,则 CreateSharedHandle 失败,DXGI_ERROR_NAME_ALREADY_EXISTS。 之所以发生这种情况,是因为这些对象共享相同的命名空间。

该名称可以具有“全局”或“本地”前缀,以在全局或会话命名空间中显式创建对象。 名称的其余部分可以包含除反斜杠字符(\)以外的任何字符。 有关详细信息,请参阅 内核对象命名空间。 快速用户切换是使用终端服务会话实现的。 内核对象名称必须遵循终端服务概述的准则,以便应用程序能够支持多个用户。

可以在专用命名空间中创建对象。 有关详细信息,请参阅 对象命名空间

pHandle

指向接收新共享句柄的 HANDLE 的指针。

返回值

类型:HRESULT

此方法返回 S_OK(如果成功),否则返回一个指示失败原因的失败代码。 如果成功,pHandle 将始终指向新创建的句柄。

言论

CreateSharedHandle 返回的句柄可用于需要 GPU 图面或围栏的“NT 句柄”的任何函数(具体取决于传递的对象),前提是调用方获得了访问权限。 下面是一些示例。

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

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

要求

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