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 |