Función D3DKMTGetSharedPrimaryHandle (d3dkmthk.h)

La función D3DKMTGetSharedPrimaryHandle recupera el identificador compartido global de la superficie principal.

Sintaxis

NTSTATUS D3DKMTGetSharedPrimaryHandle(
  D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);

Parámetros

unnamedParam1

pData [in, out]

Puntero a una estructura de D3DKMT_GETSHAREDPRIMARYHANDLE que describe los parámetros necesarios para recuperar el identificador compartido.

Valor devuelto

D3DKMTGetSharedPrimaryHandle devuelve uno de los siguientes valores:

Código devuelto Descripción
STATUS_SUCCESS El identificador se recuperó correctamente.
STATUS_DEVICE_REMOVED El adaptador de gráficos se detuvo o se restableció el dispositivo de pantalla.
STATUS_INVALID_PARAMETER Los parámetros se validaron y determinaron que son incorrectos.

Esta función también puede devolver otros valores NTSTATUS.

Comentarios

Normalmente, la superficie principal se crea mediante el subsistema de kernel de gráficos de Microsoft DirectX (Dxgkrnl.sys) cada vez que cambia el modo de presentación (aunque, en algunas situaciones, es posible que el principal compartido no exista). Si una aplicación openGL intenta crear una superficie principal, normalmente debe abrir la principal compartida existente. Para abrir la principal compartida, la aplicación OpenGL debe usar D3DKMTGetSharedPrimaryHandle para recuperar el identificador compartido global de la superficie principal.

Ejemplo

En el ejemplo de código siguiente se muestra cómo un ICD de OpenGL puede usar D3DKMTGetSharedPrimaryHandle para crear una superficie principal abriendo el identificador compartido.

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 Value
Cliente mínimo compatible Windows Vista
Plataforma de destino Universal
Encabezado d3dkmthk.h (incluya D3dkmthk.h)
Library Gdi32.lib
Archivo DLL Gdi32.dll

Consulte también

D3DKMT_GETSHAREDPRIMARYHANDLE