共用方式為


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

另請參閱

D3DKMT_GETSHAREDPRIMARYHANDLE