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
指向包含两个独立但相关数据成员(可选安全描述符)的 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 句柄”的任何函数(具体取决于传递的对象),前提是调用方获得了访问权限。 下面是一些示例。
- 使用 ID3D12Device::OpenSharedHandle与 Direct3D 12 共享图面和围栏。
- 使用 ID3D11Device1::OpenSharedResource与 Direct3D 11 共享图面。
- 使用 ID3D11Device5::OpenSharedFence与 Direct3D 11 共享围栏。
多个进程可以具有同一对象的句柄,从而允许使用该对象进行进程间同步或共享。 可以使用以下对象共享机制。
- 如果 pSecurityAttributesCreateSharedHandle 启用继承,则 CreateProcess 函数创建的子进程可以继承图面或围栏对象的句柄。
- 进程可以在调用 DuplicateHandle 函数时指定对象句柄,以创建可由另一个进程使用的重复句柄。
- 进程可以在调用 OpenSharedHandle 或 ID3D12Device::OpenSharedHandleByName 函数中指定对象的名称。
使用 CloseHandle 函数关闭句柄。 系统在进程终止时自动关闭句柄。 当对象最后一个句柄已关闭且其最后一个接口引用已释放时,将销毁该对象。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 内部版本 20348 |
支持的最低服务器 | Windows 10 内部版本 20348 |
目标平台 | 窗户 |
标头 | windows.devices.display.core.interop.h |
库 | d3d12.lib |
DLL | d3d12.dll |