DXGKCB_GETHANDLEDATA 콜백 함수(d3dkmddi.h)
DXGKCB_GETHANDLEDATA 할당과 연결된 개인 데이터를 검색합니다.
구문
DXGKCB_GETHANDLEDATA DxgkcbGethandledata;
VOID * DxgkcbGethandledata(
IN_CONST_PDXGKARGCB_GETHANDLEDATA unnamedParam1
)
{...}
매개 변수
unnamedParam1
[in] 검색할 할당 데이터를 설명하는 DXGKARGCB_GETHANDLEDATA 구조체에 대한 포인터입니다.
반환 값
DXGKCB_GETHANDLEDATA 할당에 대한 프라이빗 데이터가 포함된 버퍼를 반환합니다.
DXGKCB_GETHANDLEDATA NULL 포인터를 반환하는 경우 DirectX 그래픽 커널 하위 시스템은 다음과 같은 이유로 DXGKARGCB_GETHANDLEDATA 구조체의 hObject 멤버에 제공된 핸들을 프라이빗 데이터에 resolve 수 없습니다.
- 악의적인 공격이나 다른 버그로 인해 사용자 모드 디스플레이 드라이버에서 잘못된 핸들을 수신했습니다.
- 할당에는 수명 문제가 있었습니다.
NULL 포인터가 반환되면 디스플레이 미니포트 드라이버가 STATUS_INVALID_HANDLE 현재 실행 중인 DDI 함수에 실패해야 합니다.
설명
DirectX 그래픽 커널 하위 시스템이 디스플레이 미니포트 드라이버의 DxgkDdiCreateAllocation 함수를 호출하여 할당에 대한 핸들을 만들 때 디스플레이 미니포트 드라이버는 각 할당 핸들에 대한 프라이빗 데이터를 만들 수 있습니다. 디스플레이 미니포트 드라이버는 이후에 DXGKCB_GETHANDLEDATA 함수를 호출하여 각 그래픽 하위 시스템별 핸들에 대한 프라이빗 데이터를 검색할 수 있습니다. 따라서 프라이빗 할당 핸들 테이블을 유지 관리하기 위해 디스플레이 미니포트 드라이버가 필요하지 않습니다.
deviceSpecific 비트 필드 플래그가 pData가 가리키는 DXGKARGCB_GETHANDLEDATA 구조의 Flags 멤버에 설정된 경우 DXGKCB_GETHANDLEDATA 드라이버가 DxgkDdiOpenAllocation 함수에 대한 호출에서 반환한 디바이스별 핸들과 연결된 디바이스별 데이터를 반환합니다. DeviceSpecific 비트 필드 플래그는 디스플레이 미니포트 드라이버가 DXGKARGCB_GETHANDLEDATA Type 멤버를 DXGKARGCB_GETHANDLEDATAhObject멤버의 핸들에 대한 DXGK_HANDLE_ALLOCATION 열거형 값으로 설정하는 경우에만 유효합니다.
DXGKCB_XXX 함수는 Dxgkrnl에 의해 구현됩니다. 이 콜백 함수를 사용하려면 DXGKARGCB_GETHANDLEDATA 멤버를 설정한 다음 DXGKRNL_INTERFACE 통해 DxgkCbGetHandleData를 호출합니다.
예제
다음 코드 예제에서는 DXGKCB_GETHANDLEDATA 호출되는 DxgkDdiOpenAllocation의 구현을 보여줍니다.
NTSTATUS
DxgkDdiOpenAllocation(
VOID *InterfaceContext,
CONST DXGKARG_OPENALLOCATION *pDDIDAData)
{
DWORD dwIdx;
DXGKRNL_INTERFACE *pCallback;
PR2D3DDevice pR2D3DDev;
PHW_DEVICE_EXTENSION pAdapter;
pR2D3DDev = (PR2D3DDevice)InterfaceContext;
pAdapter = (PHW_DEVICE_EXTENSION)pR2D3DDev->pAdapter;
pCallback = &(pAdapter->ddiCallback);
for (dwIdx=0; dwIdx < pDDIDAData->NumAllocations; dwIdx++) {
DXGKARGCB_GETHANDLEDATA getHandleData = {0};
R2AllocationInfo* pAllocInfo;
getHandleData.hObject = pDDIDAData->pOpenAllocation[dwIdx].hAllocation;
getHandleData.Type = DXGK_HANDLE_ALLOCATION;
pAllocInfo = (PR2AllocationInfo)pCallback->DxgkCbGetHandleData(&getHandleData);
pDDIDAData->pOpenAllocation[dwIdx].hDeviceSpecificAllocation = (HANDLE)pAllocInfo;
pAllocInfo->vidMemData.hAllocation = pDDIDAData->pOpenAllocation[dwIdx].hAllocation;
}
return STATUS_SUCCESS;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista(WDDM 1.0) |
대상 플랫폼 | 데스크톱 |
머리글 | d3dkmddi.h(D3dkmddi.h 포함) |
IRQL | < DISPATCH_LEVEL |