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
対象プラットフォーム ユニバーサル
Header d3dkmthk.h (D3dkmthk.h を含む)
Library Gdi32.lib
[DLL] Gdi32.dll

こちらもご覧ください

D3DKMT_GETSHAREDPRIMARYHANDLE