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