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,但每次调用时,写入报表的数据都会覆盖上一次调用写入的数据。 以下步骤提供了一个很好的策略,用于以增量方式向报表添加数据。

  1. 获取最安全收集的数据。
  2. 调用 DbgReportSecondaryData 将数据写入报表。
  3. 获取风险更高的数据。
  4. 调用 DbgReportSecondaryData,将原始安全数据以及新收集的风险数据写入报表。 必须在此调用中包含安全和有风险的数据,因为此调用写入的数据将覆盖第一次调用 DbgReportSecondaryData所写入的数据。
  5. 继续调用 DbgReportSecondaryData,每次增强数据,直到没有更多要添加的数据。
  6. 完成向报表添加数据后,通过调用 DbgReportComplete关闭报表。 报表存储在文件中,并在计算机重新启动时发送到Microsoft。
  7. 如果在调用 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)