D3DKMTShareObjects 函数 (d3dkmthk.h)

D3DKMTShareObjects 共享使用 D3KMDTCreateAllocationD3KMDTCreateAllocation2D3DKMTCreateKeyedMutex2D3DKMTCreateSynchronizationObject2 函数创建的资源对象。

语法

NTSTATUS D3DKMTShareObjects(
  [in]  UINT                cObjects,
  [in]  const D3DKMT_HANDLE *hObjects,
  [in]  POBJECT_ATTRIBUTES  pObjectAttributes,
  [in]  DWORD               dwDesiredAccess,
  [out] HANDLE              *phSharedNtHandle
);

参数

[in] cObjects

hObjects 参数中提供的资源对象数。 此值必须小于或等于 D3DKMT_MAX_OBJECTS_PER_HANDLE

[in] hObjects

指向本地内核模式句柄数组的指针,这些句柄指定要共享的资源对象。 有关更多信息,请参见备注

[in] pObjectAttributes

指向 OBJECT_ATTRIBUTES 结构的指针,该结构指定资源对象的属性。

[in] dwDesiredAccess

指定资源的读取和写入访问权限。

对于 GPU 同步对象, dwDesiredAccess 可以是以下位字段的组合, (在 d3dukmdt.h) 中定义。

含义
STANDARD_RIGHTS_READ 打开同步对象的进程可以读取同步对象的状态。 必须指定此标志,否则对象将无法访问。
D3DDDI_SYNC_OBJECT_WAIT 打开同步对象的进程可以为同步对象发出等待操作。
D3DDDI_SYNC_OBJECT_SIGNAL 打开同步对象的过程可以为同步对象发出信号操作。
D3DDDI_SYNC_OBJECT_ALL_ACCESS 打开同步对象的过程可以为同步对象发出任何操作。

对于共享资源,可以将所需访问权限指定为以下标志的组合, (d3dkmthk.h) 中定义:

含义
STANDARD_RIGHTS_READ 打开资源的进程可以具有读取访问权限。 必须指定此标志,否则对象将无法访问。
SHARED_ALLOCATION_WRITE 打开资源的进程可以具有写入访问权限。 如果未指定此访问标志,则资源将作为只读打开。
SHARED_ALLOCATION_ALL_ACCESS 打开资源的进程可以具有对象的所有访问权限。

[out] phSharedNtHandle

指向指定资源对象的共享 NT 句柄的指针。

如果未设置 NtSecuritySharing 标志值,此参数将为 NULL。 有关更多信息,请参见备注

返回值

如果操作成功,该方法将返回 STATUS_SUCCESS 。 否则,此方法可能会返回相应的 NTSTATUS 错误代码。

注解

必须先创建使用 D3DKMTShareObjects 共享的对象,并设置 NtSecuritySharing 标志值。 此标志值在 D3DKMT_CREATEALLOCATIONFLAGSD3DKMT_CREATEKEYEDMUTEX2_FLAGSD3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 结构中可用。

此函数必须仅通过 hObjects 参数指定以下输入对象数组类型组合的句柄:

  • 分配
  • 分配、键锁互斥体和同步对象
  • 同步对象

操作系统将拒绝任何其他输入句柄组合。

要求

要求
最低受支持的客户端 Windows 8
最低受支持的服务器 Windows Server 2012
目标平台 通用
标头 d3dkmthk.h (包括 D3dkmthk.h)
Library Gdi32.lib
DLL Gdi32.dll

另请参阅

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DKMTCreateAllocation

D3DKMTCreateAllocation2

D3DKMTCreateKeyedMutex2

D3DKMTCreateSynchronizationObject2

D3DKMT_CREATEALLOCATIONFLAGS

D3DKMT_CREATEKEYEDMUTEX2_FLAGS