DXGKCB_INDICATE_CHILD_STATUS回调函数 (dispmprt.h)

DxgkCbIndicateChildStatus 函数记录显示适配器的指定子设备的当前状态。

语法

DXGKCB_INDICATE_CHILD_STATUS DxgkcbIndicateChildStatus;

NTSTATUS DxgkcbIndicateChildStatus(
  [in] HANDLE DeviceHandle,
  [in] PDXGK_CHILD_STATUS ChildStatus
)
{...}

参数

[in] DeviceHandle

表示显示适配器的句柄。 显示微型端口驱动程序之前在传递给 DxgkDdiStartDeviceDXGKRNL_INTERFACE 结构的 DeviceHandle 成员中获取此句柄。

[in] ChildStatus

指向 DXGK_CHILD_STATUS 结构的指针,该结构标识子设备并描述子设备的当前状态。

返回值

如果成功,DxgkCbIndicateChildStatus 将返回STATUS_SUCCESS。 否则,它将返回 Ntstatus.h 中定义的错误代码之一。

注解

当显示适配器出于以下任一原因生成中断时,显示微型端口驱动程序的 DPC for ISR 调用 DxgkCbIndicateChildStatus

  • 外部设备 (通常监视器) 已连接到具有 HPdAwarenessInterruptible HPD 感知值的显示适配器的子设备之一。 在这种情况下,显示微型端口驱动程序将 ChildStatus->Type 设置为 StatusConnection 并设置 ChildStatusHotPlug已连接到TRUE
  • 外部设备 (通常监视器) 已与具有 HPD 感知值为 HpdAwarenessInterruptible 的显示适配器子设备之一断开连接。 在这种情况下,显示微型端口驱动程序将 ChildStatus->Type 设置为 StatusConnection 并设置 ChildStatusHotPlug已连接到FALSE
  • 连接到其板载子设备之一的显示设备 (已旋转,其监视器方向感知值为 D3DKMDT_MOA_INTERRUPTIBLE) 。 在这种情况下,显示微型端口驱动程序将 ChildStatus->Type 设置为 StatusRotation 并设置 ChildStatus旋转角度 到旋转角度。
显示微型端口驱动程序的 DxgkDdiNotifyAcpiEvent 函数在以下情况下调用 DxgkCbIndicateChildStatus
  • 便携式计算机上的盖子被打开。 在这种情况下,显示微型端口驱动程序将 ChildStatus->Type 设置为 StatusConnection 并设置 ChildStatusHotPlug已连接到TRUE
  • 便携式计算机上的盖子会合上。 在这种情况下,显示微型端口驱动程序将 ChildStatus->Type 设置为 StatusConnection 并设置 ChildStatusHotPlug已连接到FALSE

示例

下面的代码示例演示如何记录子设备的当前状态。

NTSTATUS
AtiSimulateMonitor(HW_DEVICE_EXTENSION *pHwDeviceExtension, PR2_SIMULATE_MONITOR i_pEscape)
{
    NTSTATUS Status;
    PVOID MonitorDescriptor = NULL;
    DXGK_CHILD_STATUS     ChildStatus;
    ChildStatus.ChildUid    =  pHwDeviceExtension->ulNumberDisplays | HW_ID_DISPLAY_CHILD;
    ChildStatus.Type    = StatusConnection;

    if(i_pEscape->Data == NULL) {
        // Remove a simulated monitor
        if(pHwDeviceExtension->pvSimulatedMonitorDescriptor != NULL) {
            ExFreePoolWithTag(pHwDeviceExtension->pvSimulatedMonitorDescriptor, ATI_TAG);
            pHwDeviceExtension->pvSimulatedMonitorDescriptor = NULL;
            pHwDeviceExtension->ulSimulatedMonitorDescriptorLength = 0;
           pHwDeviceExtension->ulRetryCount = 0;
           pHwDeviceExtension->bReportDescriptor = FALSE;

            ChildStatus.HotPlug.Connected = FALSE;
            Status = DxgkCbIndicateChildStatus(pHwDeviceExtension->DeviceHandle, &ChildStatus);
        }
        else {
            // No simulated monitor is present so the request to remove one is invalid
            return STATUS_INVALID_PARAMETER;
        }
    }
    else {
        //Add a simulated monitor
    }
    return Status;
}

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 桌面
标头 dispmprt.h (包括 Dispmprt.h)
IRQL <=DISPATCH_LEVEL

另请参阅

DxgkDdiQueryChildRelations

DxgkDdiQueryChildStatus