DXGK_DEBUG_REPORT_INTERFACE结构(dispmprt.h)
DXGK_DEBUG_REPORT_INTERFACE 结构包含指向调试报表接口中的函数的指针,该接口由显示端口驱动程序实现。
语法
typedef struct _DXGK_DEBUG_REPORT_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
DXGK_DEBUG_REPORT_HANDLE( )(HANDLE DeviceHandle,ULONG ulCode,ULONG_PTR ulpArg1,ULONG_PTR ulpArg2,ULONG_PTR ulpArg3,ULONG_PTR ulpArg4) *DbgReportCreate;
BOOLEAN( )(DXGK_DEBUG_REPORT_HANDLE hReport,PVOID pvData,ULONG ulDataSize) *DbgReportSecondaryData;
VOID( )(DXGK_DEBUG_REPORT_HANDLE hReport) *DbgReportComplete;
} DXGK_DEBUG_REPORT_INTERFACE, *PDXGK_DEBUG_REPORT_INTERFACE;
成员
Size
此结构的大小(以字节为单位)。
Version
调试报表接口的版本号。 版本号常量在 Dispmprt.h(例如,DXGK_DEBUG_REPORT_INTERFACE_VERSION_1)中定义。
Context
指向显示端口驱动程序提供的上下文的指针。
InterfaceReference
指向由显示端口驱动程序实现的接口引用函数的指针。
InterfaceDereference
指向由显示端口驱动程序实现的接口取消引用函数的指针。
DbgReportCreate
创建初始错误报告。
如果显示微型端口驱动程序检测到故障,然后从中恢复,则可以创建一个错误报告,该报告稍后可用于调试。 首先,调用 DbgReportCreate 来创建初始报表。 然后,通过对 dbgReportSecondaryData发出一个或多个调用向报表添加数据。 将数据添加到报表后,请调用 DbgReportComplete。
DbgReportComplete 的语法如下。
// IRQL: PASSIVE_LEVEL
DXGK_DEBUG_REPORT_HANDLE (*DbgReportCreate)(
_In_ HANDLE DeviceHandle,
_In_ ULONG ulCode,
_In_ ULONG_PTR ulpArg1,
_In_ ULONG_PTR ulpArg2,
_In_ ULONG_PTR ulpArg3,
_In_ ULONG_PTR ulpArg4
);
DeviceHandle 是与显示适配器关联的上下文块的句柄。 显示微型端口驱动程序在其 DxgkDdiAddDevice* 函数中创建此句柄。 此参数可以为 NULL。
ulCode 是错误报告的代码。 支持以下代码:
- THREAD_STUCK_IN_DEVICE_DRIVER
- VIDEO_DRIVER_DEBUG_REPORT_REQUEST
- VIDEO_TDR_FATAL_ERROR
- VIDEO_TDR_SUCCESS
ulpArg1 是第一个要添加到报表的参数。 显示微型端口驱动程序的开发人员确定 ulpArg1的值和含义。
ulpArg2 是要添加到报表中的第二个参数。 显示微型端口驱动程序的开发人员确定 ulpArg2的值和含义。
ulpArg3 是要添加到报表中的第三个参数。 显示微型端口驱动程序的开发人员确定 ulpArg3的值和含义。
保留 ulpArg4。
DbgReportSecondaryData
将数据追加到之前由 DbgReportCreate创建的初始错误报告。
调用 DbgReportSecondaryData,将数据添加到先前调用 DbgReportCreate创建的初始报表。 可以多次调用 DbgReportSecondaryData,但每次调用时,写入报表的数据都会覆盖上一次调用写入的数据。 以下步骤提供了一个很好的策略,用于以增量方式向报表添加数据。
- 获取最安全收集的数据。
- 调用 DbgReportSecondaryData 将数据写入报表。
- 获取风险更高的数据。
- 调用 DbgReportSecondaryData,将原始安全数据以及新收集的风险数据写入报表。 必须在此调用中包含安全和有风险的数据,因为此调用写入的数据将覆盖第一次调用 DbgReportSecondaryData所写入的数据。
- 继续调用 DbgReportSecondaryData,每次增强数据,直到没有更多要添加的数据。
- 完成向报表添加数据后,通过调用 DbgReportComplete关闭报表。 报表存储在文件中,并在计算机重新启动时发送到Microsoft。
- 如果在调用 dbgReportComplete 之前计算机停止响应,则通过最近成功调用DbgReportSecondaryData 添加到报表中的数据将保存,然后在计算机重新启动时发送到Microsoft。
BOOLEAN (*DbgReportSecondaryData)(
_Inout_ DXGK_DEBUG_REPORT_HANDLE hReport,
_In_ PVOID pvData,
_In_ ULONG ulDataSize
);
hReport 是将向其追加数据的错误报告的句柄。 显示微型端口驱动程序以前通过调用 DbgReportCreate获取此句柄。
pvData 是指向保存要添加到报表的数据的缓冲区的指针。
ulDataSize 是要添加到报表的数据的大小(以字节为单位)。 此参数的值必须小于或等于DXGK_DEBUG_REPORT_MAX_SIZE。
DbgReportComplete
关闭错误报告并释放与报表关联的任何资源。
DbgReportCreate 在系统事件日志中创建一个条目,并显示一个对话框,告知用户失败,并提供了将错误报告上传到Microsoft的机会。
错误报告保存在文件中,并计划在计算机重新启动时发送到Microsoft。 错误报告包含错误代码和四个参数。 错误代码和前三个参数由 DbgReportCreate 的调用方提供。 报表中的第四个参数由作系统提供,并指示自计算机启动以来生成的报表数。 例如,如果第四个参数的值为 5,则表示自上次启动计算机以来,显示微型端口驱动程序生成了四个以前的错误报告。 仅保存第五个报表,因为每个报表都会覆盖上一个报表。
// IRQL: PASSIVE_LEVEL
VOID DbgReportComplete(
IN OUT DXGK_DEBUG_REPORT_HANDLE hReport
);
- hReport 是要关闭的错误报告的句柄。 显示微型端口驱动程序以前通过调用 DbgReportCreate获取此句柄。
IRQL: PASSIVE_LEVEL
言论
显示微型端口驱动程序提供此结构的 大小 和 版本 成员,然后调用 DxgkCbQueryServices*,该函数填充此结构的其余成员。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista |
标头 | dispmprt.h (包括 Dispmprt.h) |