D3DKMTGetSharedPrimaryHandle 函数 (d3dkmthk.h)
D3DKMTGetSharedPrimaryHandle 函数检索主图面的全局共享句柄。
语法
NTSTATUS D3DKMTGetSharedPrimaryHandle(
D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);
参数
unnamedParam1
pData [in, out]
指向 D3DKMT_GETSHAREDPRIMARYHANDLE 结构的指针,该结构描述检索共享句柄所需的参数。
返回值
D3DKMTGetSharedPrimaryHandle 返回以下值之一:
返回代码 | 说明 |
---|---|
STATUS_SUCCESS | 已成功检索句柄。 |
STATUS_DEVICE_REMOVED | 图形适配器已停止或显示设备已重置。 |
STATUS_INVALID_PARAMETER | 参数已验证并确定为不正确。 |
此函数还可能返回其他 NTSTATUS 值。
注解
主图面通常由 Microsoft DirectX 图形内核子系统创建, (每次显示模式更改时 Dxgkrnl.sys) (,但在某些情况下,共享主图面可能不存在) 。 如果 OpenGL 应用程序尝试创建主图面,它通常必须打开现有的共享主图面。 若要打开共享主数据库,OpenGL 应用程序必须使用 D3DKMTGetSharedPrimaryHandle 检索主图面的全局共享句柄。
示例
下面的代码示例演示 OpenGL ICD 如何使用 D3DKMTGetSharedPrimaryHandle 通过打开共享句柄来创建主图面。
HRESULT OpenSharedPrimarySurface(D3DKMT_HANDLE hAdapter,
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
D3DKMT_HANDLE hDevice,
VOID* pPrivateDriverData,
UINT PrivateDriverDataSize,
D3DKMT_HANDLE* phResource,
D3DKMT_HANDLE* phAllocation)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO AllocationInfo;
D3DKMT_GETSHAREDPRIMARYHANDLE GetHandleData;
*phResource = 0;
*phAllocation = 0;
// Get the shared handle.
GetHandleData.hAdapter = hAdapter;
GetHandleData.VidPnSourceId = VidPnSourceId;
if (!NT_SUCCESS((*pfnKTGetSharedPrimaryHandle)(&GetHandleData))) {
return E_FAIL;
}
// Was a shared primary created by the kernel?
if (GetHandleData.hSharedPrimary == NULL) {
return E_FAIL;
}
CreateAllocation.hDevice = hDevice;
CreateAllocation.hResource = NULL;
CreateAllocation.hGlobalShare = GetHandleData.hSharedPrimary;
CreateAllocation.Flags.CreateResource =
CreateAllocation.Flags.CreateShared = TRUE;
CreateAllocation.pPrivateRuntimeData = NULL;
CreateAllocation.PrivateRuntimeDataSize = 0;
CreateAllocation.pPrivateDriverData = NULL;
CreateAllocation.PrivateDriverDataSize = 0;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = NULL;
AllocationInfo.pPrivateDriverData = pPrivateData;
AllocationInfo.PrivateDriverDataSize = PrivateDataSize;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
*phResource = CreateAllocation.hResource;
*phAllocation = AllocationInfo.hAllocation;
return S_OK;
}
return E_FAIL;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
目标平台 | 通用 |
标头 | d3dkmthk.h (包括 D3dkmthk.h) |
Library | Gdi32.lib |
DLL | Gdi32.dll |