Поделиться через


Функция 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 (include D3dkmthk.h)
библиотеки Gdi32.lib
DLL Gdi32.dll

См. также

D3DKMT_GETSHAREDPRIMARYHANDLE