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 |