Compartilhar via


DXGKCB_GETHANDLEDATA função de retorno de chamada (d3dkmddi.h)

DXGKCB_GETHANDLEDATA recupera os dados privados associados a uma alocação.

Sintaxe

DXGKCB_GETHANDLEDATA DxgkcbGethandledata;

VOID * DxgkcbGethandledata(
  IN_CONST_PDXGKARGCB_GETHANDLEDATA unnamedParam1
)
{...}

Parâmetros

unnamedParam1

[in] Um ponteiro para uma estrutura DXGKARGCB_GETHANDLEDATA que descreve os dados de alocação a serem recuperados.

Retornar valor

DXGKCB_GETHANDLEDATA retorna um buffer que contém os dados privados para a alocação.

Se DXGKCB_GETHANDLEDATA retornar um ponteiro NULL, o subsistema de kernel de elementos gráficos DirectX não pôde resolve o identificador fornecido no membro hObject da estrutura DXGKARGCB_GETHANDLEDATA para dados privados por um motivo como as seguintes possibilidades:

  • Um identificador inválido foi recebido do driver de exibição do modo de usuário devido a um ataque mal-intencionado ou algum outro bug.
  • As alocações tiveram problemas de tempo de vida.

Se um ponteiro NULL for retornado, o driver de miniporto de exibição deverá falhar em sua função DDI em execução no momento com STATUS_INVALID_HANDLE.

Comentários

Quando o subsistema de kernel de elementos gráficos DirectX chama a função DxgkDdiCreateAllocation do driver de miniporta de exibição para criar identificadores para alocações, o driver de miniporta de exibição pode criar dados privados para cada identificador de alocação. O driver de miniporta de exibição pode, posteriormente, chamar a função DXGKCB_GETHANDLEDATA para recuperar dados privados para cada identificador específico do subsistema gráfico. Portanto, o driver de miniporta de exibição não é necessário para manter uma tabela de identificador de alocação privada.

Se o sinalizador de campo de bits DeviceSpecific estiver definido no membro Flags da estrutura DXGKARGCB_GETHANDLEDATA para a qual pData aponta, DXGKCB_GETHANDLEDATA retornará os dados específicos do dispositivo associados ao identificador específico do dispositivo que o driver retornou da chamada para sua função DxgkDdiOpenAllocation . Observe que o sinalizador de campo de bits DeviceSpecific só será válido se o driver de miniporto de exibição também definir o membro Type de DXGKARGCB_GETHANDLEDATA como o valor de enumeração DXGK_HANDLE_ALLOCATION para o identificador no membro hObject do DXGKARGCB_GETHANDLEDATA.

DXGKCB_XXX funções são implementadas por Dxgkrnl. Para usar essa função de retorno de chamada, defina os membros de DXGKARGCB_GETHANDLEDATA e, em seguida, chame DxgkCbGetHandleData por meio do DXGKRNL_INTERFACE.

Exemplo

O exemplo de código a seguir mostra uma implementação de DxgkDdiOpenAllocation na qual DXGKCB_GETHANDLEDATA é chamado.

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 Valor
Cliente mínimo com suporte Windows Vista (WDDM 1.0)
Plataforma de Destino Área de Trabalho
Cabeçalho d3dkmddi.h (inclua D3dkmddi.h)
IRQL < DISPATCH_LEVEL

Confira também

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE