Compartilhar via


Função D3DKMTGetSharedPrimaryHandle (d3dkmthk.h)

A função D3DKMTGetSharedPrimaryHandle recupera o identificador compartilhado global para a superfície primária.

Sintaxe

NTSTATUS D3DKMTGetSharedPrimaryHandle(
  D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);

Parâmetros

unnamedParam1

pData [in, out]

Um ponteiro para uma estrutura D3DKMT_GETSHAREDPRIMARYHANDLE que descreve os parâmetros necessários para recuperar o identificador compartilhado.

Retornar valor

D3DKMTGetSharedPrimaryHandle retorna um dos seguintes valores:

Código de retorno Descrição
STATUS_SUCCESS O identificador foi recuperado com êxito.
STATUS_DEVICE_REMOVED O adaptador gráfico foi interrompido ou o dispositivo de exibição foi redefinido.
STATUS_INVALID_PARAMETER Os parâmetros foram validados e determinados como incorretos.

Essa função também pode retornar outros valores NTSTATUS.

Comentários

Normalmente, a superfície primária é criada pelo subsistema de kernel de elementos gráficos do Microsoft DirectX (Dxgkrnl.sys) sempre que o modo de exibição é alterado (embora, em algumas situações, o primário compartilhado possa não existir). Se um aplicativo OpenGL tentar criar uma superfície primária, ele normalmente deverá abrir o primário compartilhado existente. Para abrir o primário compartilhado, o aplicativo OpenGL deve usar D3DKMTGetSharedPrimaryHandle para recuperar o identificador compartilhado global para a superfície primária.

Exemplo

O exemplo de código a seguir demonstra como um OpenGL ICD pode usar D3DKMTGetSharedPrimaryHandle para criar uma superfície primária abrindo o identificador compartilhado.

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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Plataforma de Destino Universal
Cabeçalho d3dkmthk.h (inclua D3dkmthk.h)
Biblioteca Gdi32.lib
DLL Gdi32.dll

Confira também

D3DKMT_GETSHAREDPRIMARYHANDLE