Partager via


DXGKCB_GETHANDLEDATA fonction de rappel (d3dkmddi.h)

DXGKCB_GETHANDLEDATA récupère les données privées associées à une allocation.

Syntaxe

DXGKCB_GETHANDLEDATA DxgkcbGethandledata;

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

Paramètres

unnamedParam1

[in] Pointeur vers une structure DXGKARGCB_GETHANDLEDATA qui décrit les données d’allocation à récupérer.

Valeur retournée

DXGKCB_GETHANDLEDATA retourne une mémoire tampon qui contient les données privées pour l’allocation.

Si DXGKCB_GETHANDLEDATA retourne un pointeur NULL, le sous-système du noyau graphique DirectX n’a pas pu résoudre le handle fourni dans le membre hObject de la structure DXGKARGCB_GETHANDLEDATA en données privées pour une raison telle que les possibilités suivantes :

  • Un handle non valide a été reçu du pilote d’affichage en mode utilisateur en raison d’une attaque malveillante ou d’un autre bogue.
  • Les allocations présentaient des problèmes de durée de vie.

Si un pointeur NULL est retourné, le pilote miniport d’affichage doit échouer avec la fonction DDI en cours d’exécution avec STATUS_INVALID_HANDLE.

Remarques

Lorsque le sous-système du noyau graphique DirectX appelle la fonction DxgkDdiCreateAllocation du pilote miniport d’affichage pour créer des handles pour les allocations, le pilote de miniport d’affichage peut créer des données privées pour chaque handle d’allocation. Le pilote miniport d’affichage peut ensuite appeler la fonction DXGKCB_GETHANDLEDATA pour récupérer des données privées pour chaque handle spécifique au sous-système graphique. Par conséquent, le pilote de miniport d’affichage n’est pas nécessaire pour gérer une table de handles d’allocation privée.

Si l’indicateur de champ de bits DeviceSpecific est défini dans le membre Indicateurs de la structure DXGKARGCB_GETHANDLEDATA vers laquelle pData pointe, DXGKCB_GETHANDLEDATA retourne les données spécifiques à l’appareil qui sont associées au handle spécifique au périphérique que le pilote a retourné à partir de l’appel à sa fonction DxgkDdiOpenAllocation. Notez que l’indicateur de champ de bits DeviceSpecific est valide uniquement si le pilote de miniport d’affichage définit également le membre Type de DXGKARGCB_GETHANDLEDATA sur la valeur d’énumération DXGK_HANDLE_ALLOCATION pour le handle dans le membre hObject de DXGKARGCB_GETHANDLEDATA.

DXGKCB_XXX fonctions sont implémentées par Dxgkrnl. Pour utiliser cette fonction de rappel, définissez les membres de DXGKARGCB_GETHANDLEDATA , puis appelez DxgkCbGetHandleData via le DXGKRNL_INTERFACE.

Exemple

L’exemple de code suivant montre une implémentation de DxgkDdiOpenAllocation dans laquelle DXGKCB_GETHANDLEDATA est appelée.

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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista (WDDM 1.0)
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dkmddi.h (include D3dkmddi.h)
IRQL < DISPATCH_LEVEL

Voir aussi

DXGKARGCB_GETHANDLEDATA

DxgkDdiCreateAllocation

DxgkDdiOpenAllocation

DXGKRNL_INTERFACE