DXGKCB_GETHANDLEDATA función de devolución de llamada (d3dkmddi.h)
DXGKCB_GETHANDLEDATA recupera los datos privados asociados a una asignación.
Sintaxis
DXGKCB_GETHANDLEDATA DxgkcbGethandledata;
VOID * DxgkcbGethandledata(
IN_CONST_PDXGKARGCB_GETHANDLEDATA unnamedParam1
)
{...}
Parámetros
unnamedParam1
[in] Puntero a una estructura de DXGKARGCB_GETHANDLEDATA que describe los datos de asignación que se van a recuperar.
Valor devuelto
DXGKCB_GETHANDLEDATA devuelve un búfer que contiene los datos privados de la asignación.
Si DXGKCB_GETHANDLEDATA devuelve un puntero NULL, el subsistema del kernel de gráficos directX no pudo resolver el identificador proporcionado en el miembro hObject de la estructura de DXGKARGCB_GETHANDLEDATA a datos privados por un motivo como las siguientes posibilidades:
- Se recibió un identificador no válido del controlador de pantalla en modo de usuario debido a un ataque malintencionado o a algún otro error.
- Las asignaciones tenían problemas de duración.
Si se devuelve un puntero NULL, el controlador de minipuerto de pantalla debe producir un error en su función DDI que se está ejecutando actualmente con STATUS_INVALID_HANDLE.
Comentarios
Cuando el subsistema del kernel de gráficos de DirectX llama a la función DxgkDdiCreateAllocation del controlador de miniporte para mostrar para crear identificadores a las asignaciones, el controlador de minipuerto de pantalla puede crear datos privados para cada identificador de asignación. El controlador de minipuerto de pantalla puede llamar posteriormente a la función DXGKCB_GETHANDLEDATA para recuperar datos privados para cada controlador específico del subsistema de gráficos. Por lo tanto, el controlador de minipuerto de pantalla no es necesario para mantener una tabla de identificadores de asignación privada.
Si la marca de campo de bits DeviceSpecific está establecida en el miembro Flags de la estructura de DXGKARGCB_GETHANDLEDATA a la que apunta pData , DXGKCB_GETHANDLEDATA devuelve los datos específicos del dispositivo asociados con el identificador específico del dispositivo al que el controlador devolvió de la llamada a su función DxgkDdiOpenAllocation . Tenga en cuenta que la marca de campo de bits DeviceSpecific solo es válida si el controlador de miniporte de pantalla también establece el miembro Type de DXGKARGCB_GETHANDLEDATA en el valor de enumeración DXGK_HANDLE_ALLOCATION para el identificador en el miembro hObject de DXGKARGCB_GETHANDLEDATA.
Dxgkrnl implementa DXGKCB_XXX funciones. Para usar esta función de devolución de llamada, establezca los miembros de DXGKARGCB_GETHANDLEDATA y, a continuación, llame a DxgkCbGetHandleData a través del DXGKRNL_INTERFACE.
Ejemplo
En el ejemplo de código siguiente se muestra una implementación de DxgkDdiOpenAllocation en la que se llama a 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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista (WDDM 1.0) |
Plataforma de destino | Escritorio |
Encabezado | d3dkmddi.h (incluye D3dkmddi.h) |
IRQL | < DISPATCH_LEVEL |