DXGKDDI_GETDISPLAYSTATEINTRUSIVE回调函数 (dispmprt.h)

作系统(OS)调用显示微型端口驱动程序的 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 设备已关闭。

言论

OS 调用 DxgkDdiGetDisplayStateIntrusive,以在用户处于错误状态时从驱动程序收集显示状态信息。 与 DxgkDdiGetDisplayStateNonIntrusive不同,驱动程序的 DxgkDdiGetDisplayStateIntrusive 例程可以执行对用户产生明显副作用的更侵入性作。 入侵作的定义如下(非侵入性作没有任何这些属性):

  • 它会导致对用户可见的副作用(例如暂时停止扫描和破坏性监视器连接检查)。

  • 速度缓慢,如果频繁调用,会影响系统或显示性能(以秒为单位多次)。

  • 它直接或间接更改显示子系统(或任何其他子系统)的状态。

在收集数据时,驱动程序不应有意更改系统的状态。

与对 DxgkDdiGetDisplayStateNonIntrusive的调用相比,OS 将调用此例程的频率要少得多。 在大多数错误方案中,OS 将首先调用 DxgkDdiGetDisplayStateNonIntrusive,然后调用 DxgkDdiGetDisplayStateIntrusive 以确保入侵调用的任何意外效果不会影响非侵入性数据收集。

DXGKRNL 将调用此例程,其中 NumOfTargets 设置为作系统报告有与相应 VidPnTargetId 填充的监视器连接的目标数。 当驱动程序认为给定目标上没有连接监视器时,它应设置 ReturnSubStatus,使该目标DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED。

注意

如果在收集信息时驱动程序在给定 vidpntarget 上遇到故障,则它应使用 ReturnSubStatus 设置错误状态,并继续执行下一个 vidpntarget,并且不会使整个调用失败,除非所有路径都失败。 驱动程序应在一些内部错误日志中记录此调用期间发生的错误,以便在 OS 调用 DxgkDdiCollectDiagnosticInfo 收集黑匣子信息时,这些错误会捕获为内部日志收集的一部分,以帮助 IHV 调试。

OS 将有足够的超时(大约 5 秒),DxgkDdiGetDisplayStateIntrusive 完成,使驱动程序有更多的时间收集所有相关状态。 超时后,如果驱动程序在此调用中挂起,OS 可能会 bug 检查计算机并收集转储,因此微型端口应尝试在时间范围内始终完成此调用。

此 DDI 的同步级别 零级同步

要求

要求 价值
最低支持的客户端 Windows 10 版本 2004
标头 dispmprt.h

另请参阅

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface