다음을 통해 공유


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