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
대상 플랫폼 유니버설
헤더 d3dkmthk.h(D3dkmthk.h 포함)
라이브러리 Gdi32.lib
DLL Gdi32.dll

추가 정보

D3DKMT_GETSHAREDPRIMARYHANDLE