Condividi tramite


DXGKCB_GETHANDLEDATA funzione di callback (d3dkmddi.h)

DXGKCB_GETHANDLEDATA recupera i dati privati associati a un'allocazione.

Sintassi

DXGKCB_GETHANDLEDATA DxgkcbGethandledata;

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

Parametri

unnamedParam1

[in] Puntatore a una struttura DXGKARGCB_GETHANDLEDATA che descrive i dati di allocazione da recuperare.

Valore restituito

DXGKCB_GETHANDLEDATA restituisce un buffer contenente i dati privati per l'allocazione.

Se DXGKCB_GETHANDLEDATA restituisce un puntatore NULL, il sottosistema kernel della grafica DirectX non è riuscito a risolvere l'handle fornito nel membro hObject della struttura DXGKARGCB_GETHANDLEDATA ai dati privati per un motivo come le possibilità seguenti:

  • Un handle non valido è stato ricevuto dal driver di visualizzazione in modalità utente a causa di un attacco dannoso o di un altro bug.
  • Le allocazioni hanno avuto problemi di durata.

Se viene restituito un puntatore NULL, il driver miniport visualizzato deve non eseguire la funzione DDI attualmente in esecuzione con STATUS_INVALID_HANDLE.

Commenti

Quando il sottosistema kernel della grafica DirectX chiama la funzione DxgkDdiCreateAllocation del driver di visualizzazione per creare handle per le allocazioni, il driver miniport visualizzato può creare dati privati per ogni handle di allocazione. Il driver miniport visualizzato può successivamente chiamare la funzione DXGKCB_GETHANDLEDATA per recuperare i dati privati per ogni handle specifico del sottosistema grafico. Pertanto, il driver miniport visualizzato non è necessario per mantenere una tabella di handle di allocazione privata.

Se il flag di bit-field DeviceSpecific è impostato nel membro Flags della struttura DXGKARGCB_GETHANDLEDATA a cui pData punta, DXGKCB_GETHANDLEDATA restituisce i dati specifici del dispositivo associati all'handle specifico del dispositivo restituito dal driver dalla chiamata alla funzione DxgkDdiOpenAllocation . Si noti che il flag di campo bitSpecific DeviceSpecific è valido solo se il driver miniport visualizzato imposta anche il membro Type di DXGKARGCB_GETHANDLEDATA sul valore di enumerazione DXGK_HANDLE_ALLOCATION per l'handle nel membro hObject di DXGKARGCB_GETHANDLEDATA.

DXGKCB_XXX funzioni vengono implementate da Dxgkrnl. Per usare questa funzione di callback, impostare i membri di DXGKARGCB_GETHANDLEDATA e quindi chiamare DxgkCbGetHandleData tramite il DXGKRNL_INTERFACE.

Esempio

Nell'esempio di codice seguente viene illustrata un'implementazione di DxgkDdiOpenAllocation in cui viene chiamato 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista (WDDM 1.0)
Piattaforma di destinazione Desktop
Intestazione d3dkmddi.h (include D3dkmddi.h)
IRQL < DISPATCH_LEVEL

Vedi anche

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE