Поделиться через


структура 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. Отчет хранится в файле и отправляется в Корпорацию Майкрософт при перезагрузке компьютера.
  7. Если компьютер перестает отвечать перед вызовом DbgReportComplete, данные, добавленные в отчет последним успешным вызовом DbgReportSecondaryData, а затем отправляются в Корпорацию Майкрософт при перезагрузке компьютера.
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 создает запись в журнале системных событий и отображает диалоговое окно, которое сообщает пользователю о сбое и представляет возможность отправить отчет об ошибке в корпорацию Майкрософт.

Отчет об ошибках сохраняется в файле и планируется отправить в Корпорацию Майкрософт при перезагрузке компьютера. Отчет об ошибке содержит код ошибки и четыре аргумента. Код ошибки и первые три аргумента предоставляются вызывающим методом DbgReportCreate. Четвертый аргумент в отчете предоставляется операционной системой и указывает количество отчетов, созданных с момента запуска компьютера. Например, если значение четвертого аргумента равно 5, это означает, что четыре предыдущих отчета об ошибках были созданы драйвером мини-порта отображения с момента последнего запуска компьютера. Сохраняется только пятый отчет, так как каждый отчет перезаписывает предыдущий.

// IRQL: PASSIVE_LEVEL
VOID DbgReportComplete(
   IN OUT DXGK_DEBUG_REPORT_HANDLE hReport
);
  • hReport — это дескриптор отчета об ошибке, который должен быть закрыт. Драйвер мини-порта дисплея ранее получил этот дескриптор путем вызова DbgReportCreate.

IRQL: PASSIVE_LEVEL

Замечания

Драйвер минипорта отображения предоставляет Размер и версии членов этой структуры, а затем вызывает DxgkCbQueryServices*, которая заполняет остальные элементы этой структуры.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista
заголовка dispmprt.h (include Dispmprt.h)