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) |
連結庫 | Gdi32.lib |
DLL | Gdi32.dll |