DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP回调函数 (dispmprt.h)

由操作系统调用,以请求显示微型端口驱动程序重置显示设备,并释放当前开机自测试 (POST) 设备的所有权。

从 Windows 8 开始,操作系统在即插即用 (PnP) 停止操作期间调用此函数。

若要向操作系统指示此函数受支持,驱动程序必须在调用 DxgkDdiQueryAdapterInfo 函数时设置 DXGK_DRIVERCAPS 结构的 NonVGASupport 成员。

语法

DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP DxgkddiStopDeviceAndReleasePostDisplayOwnership;

NTSTATUS DxgkddiStopDeviceAndReleasePostDisplayOwnership(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [out] PDXGK_DISPLAY_INFORMATION DisplayInfo
)
{...}

参数

[in] MiniportDeviceContext

与显示适配器关联的上下文块的句柄。 显示微型端口驱动程序的 DxgkDdiAddDevice 函数之前向 Microsoft DirectX 图形内核子系统提供了此句柄。

[in] TargetId

一个 D3DDDI_VIDEO_PRESENT_TARGET_ID 值,该值指定显示设备连接到的显示适配器上存在的视频目标的标识符。 此标识符可以是在上一次调用 DxgkDdiCommitVidPn 期间保留在当前视频当前网络中的目标 (VidPN) 状态。

有关 TargetId 参数使用的详细信息,请参阅以下“备注”部分。

[out] DisplayInfo

指向操作系统分配 的DXGK_DISPLAY_INFORMATION 结构的指针。

返回值

如果成功 则返回STATUS_SUCCESS。 否则,它将返回 Ntstatus.h 中定义的错误代码之一。 有关更多信息,请参见下面的“备注”部分。

注解

允许的颜色格式

显示微型端口驱动程序应仅报告 32 位颜色格式。 因此, DisplayInfo->ColorFormat 成员必须仅包含以下两种格式之一:
  • D3DDDIFMT_X8R8G8B8
  • D3DDDIFMT_A8R8G8B8

视频呈现目标初始化

显示微型端口驱动程序必须将 DisplayInfo->TargetId 成员设置为保持活动状态的显示器的目标标识符。 通常,此标识符将是操作系统传递给驱动程序的 TargetId 参数的值。

同样,显示微型端口驱动程序必须将 DisplayInfo-AcpiId> 成员设置为保持活动状态的显示器的 ACPI 标识符。

显示微型端口驱动程序所需的步骤

调用其 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数时,显示微型端口驱动程序必须遵循以下步骤:
  1. 驱动程序必须停止与 TargetId 参数指示的视频存在目标关联的显示设备,但必须使与此目标关联的显示器保持打开并可见。
  2. 驱动程序必须检查与此目标关联的显示器的连接性。 如果目标未连接显示器,驱动程序必须完成对此函数的调用并返回 STATUS_NOT_SUPPORTED 错误代码。
  3. 驱动程序必须禁用连接到显示适配器的所有其他显示器的信号。 如果无法执行此操作,驱动程序应尝试在所有其他显示器上放置一个空白图像。 如果无法执行此操作,驱动程序必须使屏幕上的最后一个图像保持不变。
  4. 驱动程序必须在指示的目标上保留当前显示模式,并将此模式提供回操作系统作为此函数调用的一部分。
  5. 如果驱动程序无法保持当前显示模式,或者如果目标不是活动拓扑的一部分,则驱动程序应选择备用活动目标并尝试保持该目标的当前分辨率。 如果这是不可能的,驱动程序应尝试将显示器设置为其本机分辨率或高分辨率模式。 在这种情况下,显示分辨率必须设置为至少 800 x 600 像素 ,D3DDDIFMT_R8G8B8 (24 位/像素) 或 D3DDDIFMT_X8R8G8B8 (32 bpp) D3DDDIFORMAT 枚举的颜色格式。
  6. 如果没有活动目标,驱动程序应尝试启用目标,最好是内部面板(如果可用)。
  7. 如果可能,驱动程序必须清除当前帧缓冲区并禁用硬件光标和所有显示覆盖。
  8. 如果可能,驱动程序必须将设备的伽玛斜坡设置为其默认值。
  9. 驱动程序必须将当前帧缓冲区设置为线性模式。 驱动程序通过使用默认重排范围或禁用重排模式来执行此操作。
  10. 驱动程序必须通过将当前帧缓冲区线性映射到 CPU 地址空间,使 CPU 可以访问当前帧缓冲区。
  11. 驱动程序必须确保所指示目标的可见性设置为“已启用”。
显示微型端口驱动程序执行这些步骤后,必须返回设备的当前显示设置。 驱动程序通过设置 DisplayInfo 参数引用的 DXGK_DISPLAY_INFORMATION 结构的成员来返回此信息。
注意 设备停止后,Windows 通用显示驱动程序可能会使用此显示信息来管理显示设备。
 

其他要求

在支持统一可扩展固件接口 (UEFI) 的系统上,不存在 VGA 基本输入/输出系统 (BIOS) 。 为了支持这些系统上的 PnP 停止操作,Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本支持操作系统重置 POST 设备并在 PnP 停止操作期间获取其显示信息。 操作系统通过调用显示微型端口驱动程序的 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数来执行此操作。

PnP 停止操作可以针对设备管理器等进程的请求进行响应,或者在驱动程序升级过程中发生。

从 Windows 8 开始,操作系统仅在 PnP 停止操作期间在 POST 设备上调用驱动程序的 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数。

注意 对于显示微型端口驱动程序来说,调用 DxgkCbAcquirePostDisplayOwnership 是可选的。 但是,如果驱动程序以前未调用 DxgkCbAcquirePostDisplayOwnership,则操作系统仍可能调用设备驱动程序的 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数。
 
如果驱动程序成功完成对此函数的调用,操作系统将不会调用 DxgkDdiStopDevice 函数。 如果驱动程序无法完成对此函数的调用,操作系统将调用 DxgkDdiStopDevice 函数,并且设备行为将与 Windows 7 中的行为相同。

在仅限 UEFI 的系统上,如果显示微型端口驱动程序调用此函数失败,将显示黑屏,并且未安装 IHV 驱动程序。 此方案的解决方法是让用户重启计算机。

有关如何在 PnP 方案中使用此函数的详细信息,请参阅 WDDM 1.2 及更高版本中即插即用 (PnP)

要求

要求
最低受支持的客户端 Windows 8
最低受支持的服务器 Windows Server 2012
目标平台 桌面
标头 dispmprt.h
IRQL PASSIVE_LEVEL

另请参阅

DXGKRNL_INTERFACE

DXGK_DISPLAY_INFORMATION

DXGK_DRIVERCAPS

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiQueryAdapterInfo

DxgkDdiStartDevice

DxgkDdiStopDevice