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