D3DKMTGetSharedPrimaryHandle-Funktion (d3dkmthk.h)

Die D3DKMTGetSharedPrimaryHandle Funktion ruft den globalen gemeinsam genutzten Handle für die primäre Oberfläche ab.

Syntax

NTSTATUS D3DKMTGetSharedPrimaryHandle(
  D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);

Parameter

unnamedParam1

pData- [in, out]

Ein Zeiger auf eine D3DKMT_GETSHAREDPRIMARYHANDLE-Struktur, die die Parameter beschreibt, die zum Abrufen des freigegebenen Handles erforderlich sind.

Rückgabewert

D3DKMTGetSharedPrimaryHandle gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS Das Handle wurde erfolgreich abgerufen.
STATUS_DEVICE_REMOVED Der Grafikkarte wurde beendet, oder das Anzeigegerät wurde zurückgesetzt.
STATUS_INVALID_PARAMETER Parameter wurden überprüft und ermittelt, dass sie falsch sind.

Diese Funktion kann auch andere NTSTATUS-Werte zurückgeben.

Bemerkungen

Die primäre Oberfläche wird in der Regel vom Microsoft DirectX-Grafik-Kernelsubsystem (Dxgkrnl.sys) bei jeder Änderung des Anzeigemodus erstellt (obwohl in einigen Situationen die freigegebene Primäre möglicherweise nicht vorhanden ist). Wenn eine OpenGL-Anwendung versucht, eine primäre Oberfläche zu erstellen, muss sie in der Regel die vorhandene freigegebene Primäre öffnen. Zum Öffnen der freigegebenen primären Anwendung muss die OpenGL-Anwendung D3DKMTGetSharedPrimaryHandle- verwenden, um den globalen gemeinsam genutzten Handle für die primäre Oberfläche abzurufen.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie ein OpenGL ICD D3DKMTGetSharedPrimaryHandle- verwenden kann, um eine primäre Oberfläche zu erstellen, indem der freigegebene Handle geöffnet wird.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Zielplattform- Universal
Header- d3dkmthk.h (einschließlich D3dkmthk.h)
Library Gdi32.lib
DLL- Gdi32.dll

Siehe auch

D3DKMT_GETSHAREDPRIMARYHANDLE