DXGKDDI_COLLECTDBGINFO2回调函数 (d3dkmddi.h)
DxgkDdiCollectDbgInfo2 函数输出调试报表的驱动程序信息。
语法
DXGKDDI_COLLECTDBGINFO2 DxgkddiCollectdbginfo2;
NTSTATUS DxgkddiCollectdbginfo2(
IN_CONST_HANDLE hAdapter,
INOUT_PDXGKARG_COLLECTDBGINFO2 pCollectDbgInfo2
)
{...}
参数
hAdapter
[in]与显示适配器关联的上下文块的句柄。 显示微型端口(KMD)以前提供了此句柄,用于在 MiniportDeviceContextDxgkDdiAddDevice的输出参数中 Dxgkrnl。
pCollectDbgInfo2
[in/out]指向包含调试报表信息的 DXGKARG_COLLECTDBGINFO2 结构的指针。
返回值
DxgkDdiCollectDbgInfo2 返回以下值之一:
返回代码 | 描述 |
---|---|
STATUS_SUCCESS | DxgkDdiCollectDbgInfo2 成功输出调试报表的驱动程序信息;或者,OS 忽略了缓冲区中 pBuffer 指向的内容,并且未将来自 DxgkDdiCollectDbgInfo2 的信息添加到调试报告。 |
STATUS_NO_MEMORY | DxgkDdiCollectDbgInfo2 无法分配完成所需的内存。 |
STATUS_UNSUCCESSFUL | 另一个错误阻止驱动程序收集有效的调试信息。 |
言论
每当 OS 即将生成驱动程序相关的调试报告时,Dxgkrnl 调用 KMD 的 DxgkDdiCollectDbgInfo2 函数。 DxgkDdiCollectDbgInfo2 可能在 超时检测和恢复(TDR)工作 或 OS bug 检查之前立即调用。 虽然 DxgkDdiCollectDbgInfo2 应尽快返回,但驱动程序在此函数中可以花费的最大时间没有系统定义的最大时间。
DxgkDdiCollectDbgInfo2 接收有关 TDR 的根本原因的详细信息,而不是 DxgkDdiCollectDbgInfo。 KMD 可以保存与负责 TDR 的 GPU 部分相关的状态。
- 不需要 WDDM 3.2 驱动程序来实现 DxgkddiCollectDbgInfo2,在这种情况下,OS 调用 DxgkddiCollectDbgInfo。
KMD 应收集调试信息。 调用 dxgkDdiCollectDbgInfo2 时,驱动程序会在 pCollectDbgInfo2->Reason 中收到 bug 检查代码,指示调试报告所需的信息类型。 驱动程序将所需的调试信息复制到 pCollectDbgInfo2->pBuffer 指向的缓冲区中。 驱动程序可以复制的信息的最大字节数由 pCollectDbgInfo2->BufferSize指定。
DxgkDdiCollectDbgInfo 通常在未定义的 IRQL 上运行。 但是,如果 pCollectDbgInfo2->Reason 设置为 VIDEO_TDR_TIMEOUT_DETECTED(表示适配器范围重置)或 VIDEO_ENGINE_TIMEOUT_DETECTED(从 Windows 8 开始,以指示物理适配器中的一个或多个节点重置),驱动程序必须确保 DxgkDdiCollectDbgInfo2 可分页, 在 IRQL = PASSIVE_LEVEL运行,并支持 同步零级别。
有关详细信息,请参阅 TDR 可调试性改进。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 11 版本 24H2 (WDDM 3.2) |
标头 | d3dkmddi.h |
IRQL | PASSIVE_LEVEL(请参阅备注) |