Partager via


Fonction D3DKMTGetSharedPrimaryHandle (d3dkmthk.h)

La fonction D3DKMTGetSharedPrimaryHandle récupère le handle partagé global pour la surface primaire.

Syntaxe

NTSTATUS D3DKMTGetSharedPrimaryHandle(
  D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);

Paramètres

unnamedParam1

pData [in, out]

Pointeur vers une structure de D3DKMT_GETSHAREDPRIMARYHANDLE qui décrit les paramètres requis pour récupérer le handle partagé.

Valeur retournée

D3DKMTGetSharedPrimaryHandle retourne l’une des valeurs suivantes :

Code de retour Description
STATUS_SUCCESS Le handle a été récupéré avec succès.
STATUS_DEVICE_REMOVED La carte graphique a été arrêtée ou le périphérique d’affichage a été réinitialisé.
STATUS_INVALID_PARAMETER Les paramètres ont été validés et déterminés comme incorrects.

Cette fonction peut également retourner d’autres valeurs NTSTATUS.

Remarques

La surface principale est généralement créée par le sous-système du noyau graphique Microsoft DirectX (Dxgkrnl.sys) chaque fois que le mode d’affichage change (bien que, dans certaines situations, le principal partagé n’existe peut-être pas). Si une application OpenGL tente de créer une surface primaire, elle doit généralement ouvrir le principal partagé existant. Pour ouvrir le principal partagé, l’application OpenGL doit utiliser D3DKMTGetSharedPrimaryHandle pour récupérer le handle partagé global pour la surface primaire.

Exemple

L’exemple de code suivant montre comment un ICD OpenGL peut utiliser D3DKMTGetSharedPrimaryHandle pour créer une surface primaire en ouvrant le handle partagé.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
Plateforme cible Universal
En-tête d3dkmthk.h (inclure D3dkmthk.h)
Bibliothèque Gdi32.lib
DLL Gdi32.dll

Voir aussi

D3DKMT_GETSHAREDPRIMARYHANDLE