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 |