функция обратного вызова DXGKDDI_GETDISPLAYSTATEINTRUSIVE (dispmprt.h)
Операционная система (ОС) вызывает драйвера минипорта дисплея DxgkDdiGetDisplayStateNonIntrusive для сбора сведений о состоянии отображения от драйвера.
Синтаксис
DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;
NTSTATUS DxgkddiGetdisplaystateintrusive(
[in] HANDLE Context,
[in/out] PDXGKARG_GETDISPLAYSTATEINTRUSIVE pArgs
)
{...}
Параметры
[in] Context
Указатель на закрытый контекст, возвращаемый DxgkDdiQueryInterface.
[in/out] pArgs
Указатель на структуру DXGKARG_GETDISPLAYSTATEINTRUSIVE.
Возвращаемое значение
DxgkDdiGetDisplayStateIntrusive возвращает STATUS_SUCCESS, если он выполнен успешно. В противном случае возвращается код ошибки, например один из следующих.
Код ошибки | Значение |
---|---|
STATUS_DRIVER_INTERNAL_ERROR | В драйвере произошла универсальная ошибка программного обеспечения. |
STATUS_ACCESS_DENIED | Оборудование в настоящее время используется другими потоками, и этот DDI не может получить к нему доступ. |
STATUS_DEVICE_HARDWARE_ERROR | Произошла универсальная ошибка HW. |
STATUS_DEVICE_POWERED_OFF | Устройство отключено. |
Замечания
ОС вызывает DxgkDdiGetDisplayStateIntrusive для сбора сведений о состоянии отображения от драйвера, когда пользователь уже находится в плохом состоянии. В отличие от DxgkDdiGetDisplayStateNonIntrusive, драйвера DxgkDdiGetDisplayStateIntrusive могут выполнять более навязчивые операции, которые имеют видимые побочные эффекты для пользователя. Навязчивая операция определяется следующим образом (неинтрузивные операции не имеют ни одного из этих свойств):
Это приводит к побочным эффектам (сбоям), видимым пользователю (например, временной остановке сканирования и проверке подключения деструктивного монитора).
Это медленно, и влияет на производительность системы или отображается при частом вызове (несколько раз в секунду).
Он изменяет состояние подсистемы отображения (или любой другой подсистемы) напрямую или косвенно.
Драйвер не должен намеренно изменять состояние системы при сборе данных.
ОС будет вызывать эту подпрограмму гораздо реже относительно вызовов DxgkDdiGetDisplayStateNonIntrusive. В большинстве сценариев ошибок ОС сначала вызовет DxgkDdiGetDisplayStateNonIntrusive, а затем вызовет DxgkDdiGetDisplayStateIntrusive, чтобы гарантировать, что любое непреднамеренное воздействие на навязчивый вызов не влияет на сбор ненавязчивых данных.
DXGKRNL вызовет эту подпрограмму с NumOfTargets задать количество целевых объектов, на которых ос сообщает, что монитор подключен к соответствующему VidPnTargetId заполнен. Когда драйвер считает, что монитор не подключен к заданному целевому объекту, он должен задать ReturnSubStatus, чтобы этот целевой объект был DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED.
Заметка
Если драйвер попадает в сбой для заданного vidpntarget во время сбора информации, он должен использовать ReturnSubStatus, чтобы задать состояние ошибки и перейти к следующему vidpntarget и не завершить общий вызов, если только все пути не попали в сбои. Драйверы должны в идеале записывать ошибки во время этого вызова во внутреннем журнале ошибок, чтобы при вызове ОС DxgkDdiCollectDiagnosticInfo для сбора сведений о черном ящике эти ошибки фиксируются как часть внутренней коллекции журналов для отладки IHV.
Ос будет иметь достаточно времени ожидания (примерно 5 секунд) для DxgkDdiGetDisplayStateIntrusive, что позволит драйверу больше времени собирать все соответствующее состояние. После истечения времени ожидания ОС может проверить компьютер и собрать дамп, если драйвер зависает в этом вызове, поэтому минипорт должен всегда пытаться завершить этот вызов в течение периода времени.
Уровень синхронизации для этого DDI синхронизации нулевого уровня.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 версии 2004 |
заголовка | dispmprt.h |
См. также
DXGKARG_GETDISPLAYSTATEINTRUSIVE