DXGKCB_GETHANDLEDATA回调函数 (d3dkmddi.h)
DXGKCB_GETHANDLEDATA 检索与分配关联的专用数据。
语法
DXGKCB_GETHANDLEDATA DxgkcbGethandledata;
VOID * DxgkcbGethandledata(
IN_CONST_PDXGKARGCB_GETHANDLEDATA unnamedParam1
)
{...}
参数
unnamedParam1
[in]指向描述要检索的分配数据的 DXGKARGCB_GETHANDLEDATA 结构的指针。
返回值
DXGKCB_GETHANDLEDATA 返回一个缓冲区,其中包含分配的专用数据。
如果 DXGKCB_GETHANDLEDATA 返回 NULL 指针,则 DirectX 图形内核子系统无法解析 hObjectDXGKARGCB_GETHANDLEDATA 结构成员中提供的句柄,原因如下:
- 由于恶意攻击或其他 bug,从用户模式显示驱动程序收到无效句柄。
- 分配有生存期问题。
如果返回 NULL 指针,则显示微型端口驱动程序应在其当前运行的 DDI 函数中失败,并STATUS_INVALID_HANDLE。
言论
当 DirectX 图形内核子系统调用显示微型端口驱动程序的 DxgkDdiCreateAllocation 函数来创建分配句柄时,显示微型端口驱动程序可以为每个分配句柄创建专用数据。 随后,显示微型端口驱动程序可以调用 DXGKCB_GETHANDLEDATA 函数来检索每个特定于图形子系统的句柄的专用数据。 因此,无需显示微型端口驱动程序来维护专用分配句柄表。
如果在 标志DXGKARGCB_GETHANDLEDATA 结构 pData 指向的 DXGKARGCB_GETHANDLEDATA 结构的成员中设置 DeviceSpecific 位字段标志,DXGKCB_GETHANDLEDATA 返回与驱动程序从调用返回 DxgkDdiOpenAllocation 函数的设备特定句柄关联的特定于设备的数据。 请注意,仅当显示微型端口驱动程序还将 DXGKARGCB_GETHANDLEDATA 的 类型 成员设置为 hObject 成员 DXGKARGCB_GETHANDLEDATA中句柄的 DXGK_HANDLE_ALLOCATION 枚举值时,DeviceSpecific 位字段标志才有效。
DXGKCB_XXX 函数由 Dxgkrnl实现。 若要使用此回调函数,请设置 DXGKARGCB_GETHANDLEDATA 的成员,然后通过 DXGKRNL_INTERFACE调用 DxgkCbGetHandleData。
例
下面的代码示例演示调用 DXGKCB_GETHANDLEDATADxgkDdiOpenAllocation 的实现。
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;
}
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista (WDDM 1.0) |
目标平台 | 桌面 |
标头 | d3dkmddi.h (包括 D3dkmddi.h) |
IRQL | < DISPATCH_LEVEL |