Compartir a través de


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

Consulte también

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE