функция обратного вызова 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 не удалось разрешить дескриптор, указанный в элементе hObjectструктуры DXGKARGCB_GETHANDLEDATA , в частные данные по следующим причинам:
- Недопустимый дескриптор был получен от драйвера отображения пользовательского режима из-за вредоносной атаки или другой ошибки.
- При выделении были проблемы со временем существования.
Если возвращается указатель NULL, драйвер минипорта дисплея должен завершиться сбоем выполняемой в данный момент функции DDI с STATUS_INVALID_HANDLE.
Комментарии
Когда подсистема ядра графики DirectX вызывает функцию DxgkDdiCreateAllocation драйвера минипорта дисплея для создания дескрипторов выделения, драйвер минипорта дисплея может создавать частные данные для каждого дескриптора выделения. Драйвер мини-порта дисплея может впоследствии вызвать функцию DXGKCB_GETHANDLEDATA для получения частных данных для каждого дескриптора, зависят от графической подсистемы. Таким образом, драйвер минипорта дисплея не требуется для обслуживания таблицы частных дескрипторов выделения.
Если флаг битового поля DeviceSpecific установлен в элементе Flags структуры DXGKARGCB_GETHANDLEDATA , на которую указывает pData , DXGKCB_GETHANDLEDATA возвращает данные для конкретного устройства, связанные с дескриптором устройства, возвращенным драйвером из вызова функции DxgkDdiOpenAllocation . Обратите внимание, что флаг bit-field DeviceSpecific действителен только в том случае, если драйвер мини-порта дисплея также задает для элемента TypeDXGKARGCB_GETHANDLEDATA значение перечисления DXGK_HANDLE_ALLOCATION для дескриптора в элементе hObjectDXGKARGCB_GETHANDLEDATA.
DXGKCB_XXX функции реализуются dxgkrnl. Чтобы использовать эту функцию обратного вызова, задайте члены DXGKARGCB_GETHANDLEDATA , а затем вызовите DxgkCbGetHandleData через DXGKRNL_INTERFACE.
Пример
В следующем примере кода показана реализация DxgkDdiOpenAllocation , в которой вызывается DXGKCB_GETHANDLEDATA .
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 |