Функция 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