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 (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 函数创建的子进程可以将句柄继承到 Surface 或 fence 对象。
- 进程可以在对 DuplicateHandle 函数的调用中指定对象句柄,以创建可由另一个进程使用的重复句柄。
- 进程可以在调用 OpenSharedHandle 或 ID3D12Device::OpenSharedHandleByName 函数时指定对象的名称。
使用 CloseHandle 函数关闭句柄。 进程终止时,系统会自动关闭句柄。 当对象的最后一个句柄已关闭且其最后一个接口引用已释放时,该对象将被销毁。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10内部版本 20348 |
最低受支持的服务器 | Windows 10内部版本 20348 |
目标平台 | Windows |
标头 | windows.devices.display.core.interop.h |
Library | d3d12.lib |
DLL | d3d12.dll |