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


функция обратного вызова DXGKDDI_GETDISPLAYSTATENONINTRUSIVE (dispmprt.h)

Операционная система вызывает драйвер мини-порта дисплея DxgkDdiGetDisplayStateNonIntrusive подпрограмму, чтобы неинтрусивно собирать сведения о состоянии отображения от драйвера.

Синтаксис

DXGKDDI_GETDISPLAYSTATENONINTRUSIVE DxgkddiGetdisplaystatenonintrusive;

NTSTATUS DxgkddiGetdisplaystatenonintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATENONINTRUSIVE pArgs
)
{...}

Параметры

[in] Context

Указатель на закрытый контекст, возвращаемый DxgkDdiQueryInterface.

[in/out] pArgs

Указатель на структуру DXGKARG_GETDISPLAYSTATENONINTRUSIVE.

Возвращаемое значение

DxgkDdiGetDisplayStateNonIntrusive возвращает STATUS_SUCCESS, если он выполнен успешно. В противном случае возвращается код ошибки, например один из следующих.

Код ошибки Значение
STATUS_DRIVER_INTERNAL_ERROR В драйвере произошла универсальная ошибка программного обеспечения.
STATUS_ACCESS_DENIED Оборудование в настоящее время используется другими потоками, и этот DDI не может получить к нему доступ.
STATUS_DEVICE_HARDWARE_ERROR Произошла универсальная ошибка HW.
STATUS_DEVICE_POWERED_OFF Устройство отключено.

Замечания

ОС вызывает DxgkDdiGetDisplayStateNonIntrusive для сбора сведений о состоянии отображения от драйвера. В отличие от DxgkDdiGetDisplayStateIntrusive, программа драйвера DxgkDdiGetDisplayStateNonIntrusive не должна выполнять никаких операций, вызывающих видимые побочные эффекты для пользователя, и процесс сбора должен быть относительно быстрым (в идеале в пределах нескольких миллисекунд). Частота вызова этой подпрограммы будет относительно высокой. Помимо вызова диагностики плохого состояния пользователя, ОС также может использовать эту процедуру для записи сведений о состоянии журнала от драйвера для отладки.

В редких случаях, когда реализация для конкретной платформы требует от драйвера выполнять навязчивые операции в рамках вызова DxgkDdiGetDisplayStateNonIntrusive, драйвер должен выполнять операции, но должен задать pArgs->ReturnSubStatus DXGK_DIAG_GETDISPLAYSTATE_CAUSED_GLITCH или DXGK_DIAG_GETDISPLAYSTATE_CHANGED_DISPLAY_STATE соответствующим образом. На основе значения ReturnSubStatus операционная система (ОС) может вызывать эту подпрограмму только для сценариев ошибок в данной системе.

ОС будет вызывать DxgkDdiGetDisplayStateNonIntrusive (периодически или на других распространенных событиях) для сбора данных о состоянии драйвера для отладки и просмотра исторической временной шкалы. ОС также вызовет эту подпрограмму в определенных сценариях ошибок (например, черных экранах) перед сбором более подробных сведений путем вызова DxgkDdiGetDisplayStateIntrusive. Учитывая возможную частоту этого вызова, драйверы должны выполнять его как можно быстрее. ОС вызовет этот DDI с NumOfTargets установить максимальное количество целевых объектов, поддерживаемых заданным графическим адаптером, и VidPnTargetId. Минипорт-драйвер должен заполнить только сведения о состоянии отображения для целевых объектов, на которых фактически подключен монитор. Для vidpntarget, на котором нет монитора, минипорт должен просто заполнить DXGK_DIAG_DISPLAY_CONNECTIVITY, и ОС будет игнорировать все остальные поля для этого целевого объекта.

Заметка

Драйверы должны использовать только ReturnSubStatus, чтобы сообщить об ошибках и не использовать DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED для отслеживания состояния подключения к отчету. Основной целью DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED является навязчивые вызовы, в которых ОС не спрашивает о мониторинге подключения.

Если драйвер попадает в сбой в заданном vidpntarget во время сбора информации, он должен использовать ReturnSubStatus, чтобы задать состояние ошибки и перейти к следующему vidpntarget и не завершить общий вызов, если только все пути не попадут сбои. Драйверы в идеале должны записывать ошибки во время этого вызова во внутреннем журнале ошибок, чтобы при вызове ОС DxgkDdiCollectDiagnosticInfo для сбора сведений о черном ящике эти ошибки фиксируются как часть внутренней коллекции журналов, чтобы помочь IHV во время отладки.

Уровень синхронизации для этого DDI синхронизации нулевого уровня.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 2004
заголовка dispmprt.h

См. также

DXGKARG_GETDISPLAYSTATENONINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateIntrusive

DxgkDdiQueryInterface